題目描述:機器人從 m×n 網格左上角走到右下角,每步只能向右或向下。網格中部分格子有障礙物(值為 1),求不同的路徑總數。
解題思路:標準 DP:dp[i][j] = 到達 (i,j) 的路徑數。障礙物格子設為 0(無法到達)。轉移:dp[i][j] = dp[i-1][j] + dp[i][j-1](若 obstacleGrid[i][j] == 1 則 dp[i][j] = 0)。可原地修改 obstacleGrid 節省空間,或用滾動一維陣列。
時間複雜度:O(m × n) — 遍歷整個網格一次。
空間複雜度:O(n) — 滾動一維陣列只儲存一行。
1. dp[0] = 1 if start not blocked, else 0
2. For each row i from 0 to m-1:
For each col j from 0 to n-1:
If obstacle: dp[j] = 0
Else if j > 0: dp[j] += dp[j-1] (add left neighbor)
3. Return dp[n-1]完整 2D DP O(mn) 空間:dp[i][j] 存儲到達每格路徑數,直觀但使用 O(mn) 空間 — 可進一步壓縮為一維。
記憶化遞迴:dfs(i, j) 從終點往回,用 memo 表 — 功能等效,但遞迴呼叫棧在 m×n 大時有溢位風險。
long long 而非 int 的原因是什麼?在什麼規模下 int 會溢位?