題目鏈接:63. 不同路徑 II - 力扣(LeetCode)
?
解法:
?本題為不同路徑的變型,只不過有些地方有「障礙物」,只要在「狀態轉移」上稍加修改就可解決。
- 狀態表示:
對于這種Γ路徑類」的問題,我們的狀態表??般有兩種形式:
- 從 [i, j] 位置出發,巴拉巴拉;
- 從起始位置出發,到達 [i, j] 位置,巴拉巴拉。
這?選擇第?種定義狀態表示的方式:
dp[i][j] 表示:?到 [i, j] 位置處,?共有多少種方式。
- 狀態轉移:

前的?小步,有兩種情況:
- 從 [i, j] 位置的上?( [i - 1, j] 的位置)向下走一步,轉移到 [i, j] 位置;
- 從 [i, j] 位置的左?( [i, j - 1] 的位置)向右走一步,轉移到 [i, j] 位置。
但是, [i - 1, j] 與 [i, j - 1] 位置都是可能有障礙的,此時從上面或者左邊是不可能到達 [i, j] 位置的,也就是說,此時的?法數應該是 0。
由此我們可以得出?個結論,只要這個位置上Γ有障礙物」,那么我們就不需要計算這個位置上的值,直接讓它等于 0 即可。
- 初始化:

- 輔助結點??的值要Γ保證后續填表是正確的」;
- Γ下標的映射關系」。
在本題中,添加一行,并且添加?列后,只需將 dp[1][0] 的位置初始化為 1 即可。
- 填表順序:
根據Γ狀態轉移」的推導,填表的順序就是Γ從上往下」填每??,每??Γ從左往右」。
- 返回值:
根據Γ狀態表示」,我們要返回的結果是 dp[m][n] 。
代碼:
C++:
java: