动态规划,空间O(min(m,n)),时间O(mn)
行列等价,交换之后不会影响路径数。
当前位置的状态dp[j]由左边和上边的状态相加得来,而这两个状态恰好对应dp[j-1]和dp[j]。
class Solution: def uniquePaths(self , m: int, n: int) -> int: if m==1 or n==1: return 1 if m < n: # 用小的值构建dp数组,空间复杂度O(min(m,n)) m, n = n, m dp = [1 for _ in range(n)] # 用于存放从上方和左方来的路径数,dp[0]始终为初始值1 for i in range(m-1): for j in range(1, n): dp[j] = dp[j-1] + dp[j] # 状态转移,当前=左+上 return dp[j]