目前只想出空间复杂度O(N*N/2)的方法,代码:
class Solution:
def minimumTotal(self, triangle: List[List[int]]) -> int:
for r,row in enumerate(triangle):
if r == 0:
continue
for c,col in enumerate(row):
if c-1 >=0 and c < len(triangle[r-1]):
triangle[r][c] += min(triangle[r-1][c-1],triangle[r-1][c])
elif c-1 < 0:
triangle[r][c] += triangle[r-1][c]
elif c >= len(triangle[r-1]):
triangle[r][c] += triangle[r-1][c-1]
if r == len(triangle)-1:
return min(triangle[r])
return min(triangle[0]) # 防止只有1行的情况
继续思考空间复杂度为O(n)的方法……