動態規劃 不同路徑(I,II

2021-08-21 17:33:48 字數 1698 閱讀 8568

不同路徑

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

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

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

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

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

示例 1:

輸入: m = 3, n = 2

輸出: 3

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

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

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

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

示例 2:

輸入: m =7, n = 3

輸出: 28

解題思路

用dp[i][j]表示從[0][0]點到[i][j]點的不同路徑有多少,那麼dp[i][j]的不同路徑數就是dp[i-1][j]向左走,和dp[i][j-1]向下走的路徑之和,即dp[i][j]=dp[i-1][j]+dp[i][j-1]。在 第一行或者第一列只有一條路徑,即dp[0][i]=1,dp[i][0]=1;

c++**

int uniquepaths(int m, int n) 

for(int i=0;i0][i]=1;

}for(int i=1;ifor(int j=1;j1][j]+dp[i][j-1];}}

return dp[m-1][n-1];

}

不同路徑ii

乙個機械人位於乙個 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. 向下 -> 向下 -> 向右 -> 向右

解題思路

和「不同路徑」一樣,但是對於第一行和第一列的初始化不一樣,在初始化第一行或者第一列是如果前面已經有障礙了,那麼後面的點都是不可達的,在更新dp[i][j]也是一樣,如果[i][j]點是障礙,那麼該點不可達,即dp[i][j]=0;

c++**

int uniquepathswithobstacles(vector

>& obstaclegrid)

for(int i=0;iif(obstaclegrid[0][i]==0)dp[0][i]=1;

break;

}for(int i=1;ifor(int j=1;jif(obstaclegrid[i][j]==0)}}

return dp[m-1][n-1];

}

動態規劃 不同路徑

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img yrgqqaoc 1607527...

leetcode 不同路徑I II

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?思路 從起點 x 0,y 0 x 0,y 0 x 0,y 0 出發,下一步只能向右或者向下到達第二點...

LeetCode 不同路徑 i ii

q 乙個機械人在m n大小的地圖的左上角 起點,下圖中的標記 start 的位置 機械人每次向下或向右移動。機械人要到達地圖的右下角。終點,下圖中的標記 finish 的位置 可以有多少種不同的路徑從起點走到終點?備註 m和n小於等於100 a 典型動態規劃問題了。public int unique...