演算法 不同路徑問題

2021-10-04 21:34:27 字數 2393 閱讀 4438

2、不同路徑(ii)

62. 不同路徑

本問題是動態規劃的乙個比較經典的題目,和跳台階問題本質上是一樣的,只是跳的位置不一樣而已。

乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。

機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。

問總共有多少條不同的路徑?

例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?

示例 1:

輸入: m = 3, n = 2

輸出: 3

解釋:從左上角開始,總共有 3 條路徑可以到達右下角。

1. 向右 -> 向右 -> 向下

2. 向右 -> 向下 -> 向右

3. 向下 -> 向右 -> 向右

示例 2:

輸入: m = 7, n = 3

輸出: 28

1 <= m, n <= 100

題目資料保證答案小於等於 2 * 10 ^ 9

由於只能向右或者向下,那麼在機械人經過某個點的時候就會有這樣的關係

dp[i]

[j]=dp[i-1]

[j]+dp[i]

[j-1

];

即當前位置的方案數為左側方案數和上側方案數之和。

那初始條件我們怎麼確定呢?

由於這個機械人走路比較獨特,所以其實我們可以它走到第一行或者第一列的每個位置,都只有一種方案:一條路走到黑。為此,我們將其初始化為1即可

public

intuniquepaths

(int m,

int n)

for(

int i=

0;i)for

(int i=

1;ireturn dp[m-1]

[n-1];

}

我們還可以對其進一步優化,

我們使用了兩個迴圈來初始化dp陣列,其實這是不必的,我們只需要在遍歷矩陣的時候判斷訪問的是不是左邊界和上邊界,將左邊界和上邊界置為1即可。

public

intuniquepaths

(int m,

int n)

int[

]dp=

newint

[m][n]

;//表示到達每個位置的方案數

for(

int i=

1;i(j-1==0

) dp[i]

[j]=dp[i-1]

[j]+dp[i]

[j-1];

}}return dp[m-1]

[n-1];

}

63.不同路徑(||)

機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。

現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?

網格中的障礙物和空位置分別用 1 和 0 來表示。

說明:m 和 n 的值均不超過 100。

示例 1:

輸入:[

[0,0,0],

[0,1,0],

[0,0,0]

]輸出: 2

解釋:3x3 網格的正中間有乙個障礙物。

從左上角到右下角一共有 2 條不同的路徑:

1. 向右 -> 向右 -> 向下 -> 向下

2. 向下 -> 向下 -> 向右 -> 向右

這次我們的路徑裡出現了障礙物,不過這不是什麼問題。

轉移方程還是上面的

dp[i]

[j]=dp[i-1]

[j]+dp[i]

[j-1

];

只不過我們需要對障礙物加乙個條件,如果i,j的位置為障礙物,那麼我們將dp[i][j]標註為0,這樣就可以了。

public

intuniquepathswithobstacles

(int

obstaclegrid)

for(

int i=

0;i(obstaclegrid[0]

[i]!=1)

;i++

)for

(int i=

1;i)else}}

return dp[m-1]

[n-1];

}

上面的空間複雜度還可以再優化一下,不過寫出來就不太優雅了。

演算法題10 不同路徑問題

1 不同路徑 i leetcode62題 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。class solution defuniq...

演算法(16) 不同路徑

僅記錄學習筆記,如有錯誤歡迎指正。乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?思路 採用動態規劃。動態規劃要求利用到上一次的結果,是一種特殊的迭...

LeetCode 不同路徑問題

62.不同路徑 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過...