劍指offer
contentsleetcode_#63_不同路徑ii乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。
問總共有多少條不同的路徑?
例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?
示例 1:
輸入: m = 3, n = 2
輸出: 3
解釋:從左上角開始,總共有 3 條路徑可以到達右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
示例 2:
輸入: m = 7, n = 3
輸出: 28
動態規劃。
狀態定義:
dp[i][j]
表示從座標[0,0]
到[i,j]
的路徑總數。
初始狀態:
dp[0][0] = 1
狀態轉移方程:
dp[i][j] = dp[i-1][j] + dp[i][j - 1] (i,j≠0)
dp[i][j] = dp[i-1][j] (i ≠ 0,j = 0)
dp[i][j] = dp[i][j - 1] (i = 0,j ≠0)
返回值:
dp[rows - 1][cols - 1]
編碼時需要注意,函式引數m,n分別代表列數和行數,不要弄反,可以重新用rows,cols變數表示,更加清晰。
class
solution
}return dp[rows - 1][cols - 1];}}
乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。
現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?
網格中的障礙物和空位置分別用 1 和 0 來表示。
說明:m 和 n 的值均不超過 100。
示例 1:
輸入:
[ [0,0,0],
[0,1,0],
[0,0,0]
]輸出: 2
解釋:3x3 網格的正中間有乙個障礙物。
從左上角到右下角一共有 2 條不同的路徑:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右
與#62
題相比,僅僅是增加了乙個可能會有障礙的設定。處理也很簡單,就是在dp
陣列中,將障礙所在位置設定為0。
class
solution
else
if(i == 0 && j != 0)else
if(i != 0 && j == 0)else
if(i != 0 && j != 0)}}
return dp[rows - 1][cols - 1];}}
62 63 不同路徑
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?class solution def uniquepaths self,m int,n int in...
Leecode 62 63 不同路徑
i 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?class solution for int j 1 j0 j 1 for int i 1 if...
不同路徑(LeetCode)
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 ...