[
2d-array
dp
]
Leetcode 0120. Triangle
Problem statement
https://leetcode.com/problems/triangle/
Solution
Let dp(i, j) be the answer to the question: what is the minimum length of path, ending in i-th line and j-th element of this line. Then we can have two options:
- If we reached the last line, we do not have options to go next, so we just return
triangle[i][j]. - If we did not reached the last line, we can go either to
(i + 1, j)or to(i +1, j + 1), so we choose the minumum of two this values.
Complexity
Time and space complexity is O(n^2), because we have this number of states and only 2 transactions from one state. Note, that space complexity can be reduced to O(n), because in fact we need only last line, or it can be even reduced to O(1) if we allowed to change original triangle.
Code
class Solution:
def minimumTotal(self, triangle):
@lru_cache(None)
def dp(i, j):
if i == len(triangle) - 1: return triangle[i][j]
return min(dp(i+1, j), dp(i+1, j+1)) + triangle[i][j]
return dp(0, 0)