2016-12-17 2 views
-5

У меня есть следующий код:Найти максимальный путь в пирамиде

def max_trail(pyramid,row=0,col=0): 
    if not pyramid: 
     return 0 
    if len(pyramid) == 1: 
     return max(pyramid[0]) 
    if col >= len(pyramid[row]): 
     return 0 
    return (pyramid[row][col] + max(
     max_trail(pyramid[1:], row+1, col), 
     max_trail(pyramid[1:], row+1, col+1) 
    )) 

но для ввода: max_trail ([[4], [5,7], [3,4,2], [ 8,3,6,1]]) Я получаю сообщение об ошибке «Указатель вне диапазона». я не знаю, что do.I должны ваша помощь ~~

+0

Вы до сих пор отказываются комментировать или иным образом улучшить свои стиль кодирования? Или просто объясните цель своего кода? –

+0

Вы получаете сообщение об ошибке, потому что вы удаляете строки и в то же время увеличиваете значение 'row'variable. Но что должен делать этот код? – fafl

+0

получает пирамиду в списке списков и возвращает максимальный путь – daniel

ответ

1

Это работает:

def max_trail(pyramid, row=0, col=0): 
    if len(pyramid) <= row + 1: 
     return pyramid[row][col] 
    return pyramid[row][col] + max(
     max_trail(pyramid, row+1, col), 
     max_trail(pyramid, row+1, col+1) 
    ) 

memoized версия может быть:

def max_trail(pyramid, row=0, col=0, memo={}): 
    if (row, col) in memo: 
     return memo[(row, col)] 
    if len(pyramid) <= row + 1: 
     result = pyramid[row][col] 
    else: 
     result = pyramid[row][col] + max(
      max_trail(pyramid, row+1, col, memo), 
      max_trail(pyramid, row+1, col+1, memo) 
     ) 
    memo[(row, col)] = result 
    return result 
+0

Выглядит хорошо, но вы должны добавить 'memo' в качестве четвертого параметра для рекурсивных вызовов. – fafl

+0

Добавлено memoized version – fafl

+0

Мне интересно, почему вы хотите удалить это сообщение, перезапишите его случайными символами, а затем задайте точно такой же вопрос здесь: http://stackoverflow.com/questions/41200405 – fafl