不同路徑
乙個機械人位於乙個 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...