https://leetcode.com/problems/triangle/description/?envType=study-plan-v2&envId=top-interview-150
class Solution:
def minimumTotal(self, triangle: List[List[int]]) -> int:
n = len(triangle)
if n == 1:
return triangle[0][0]
cache = [[0 for _ in range(n)] for _ in range(n)]
cache[0][0] = triangle[0][0]
for i in range(1, n):
for j in range(i + 1):
if j == 0:
cache[i][j] = cache[i - 1][j] + triangle[i][j]
elif j == i:
cache[i][j] = cache[i - 1][j - 1] + triangle[i][j]
else:
cache[i][j] = min(cache[i - 1][j - 1], cache[i - 1][j]) + triangle[i][j]
return min(cache[n - 1])