
dfs(i, j) = 从 (0,0) 走到 (i,j) 的最小路径和
到 (i, j) 只能 :向下 or 向右
clike
dfs(i, j) = min(
dfs(i + 1, j), // 向下
dfs(i, j + 1) // 向右
) + grid[i][j]
时间复杂度:O(m × n)
空间复杂度:O(m × n)
clike
class Solution:
def minPathSum(self, grid: List[List[int]]) -> int:
# 时间复杂度:O(m × n), 空间复杂度:O(m × n)
m = len(grid)
n = len(grid[0])
@cache
def dfs(i, j): # 当前位置(i, j)
# 到达终点右下角
if i == m - 1 and j == n - 1:
return grid[i][j]
# 越界
if i >= m or j >= n:
return float('inf')
# 向下 or 向右
return grid[i][j] + min(
dfs(i + 1, j), # 向下
dfs(i, j + 1) # 向右
)
return dfs(0, 0) # 当前位置(i, j)从(0,0)开始