LeetCode 62 63 不同路徑

2022-03-06 11:25:09 字數 2009 閱讀 6461

劍指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。示例 ...