leetcode 62 不同的路徑
阿新 • • 發佈:2018-11-30
一個機器人位於一個 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,其中dp[i][j]表示到當前位置不同的走法的個數,然後可以得到遞推式為: dp[i][j] = dp[i - 1][j] + dp[i][j - 1],這裡為了節省空間,我們使用一維陣列dp,一行一行的重新整理也可以。
public int uniquePaths(int m, int n) {
int[] dp = new int[n];
for(int i = 0; i < n; i++){
dp[i] = 1;
}
for(int i = 1; i < m; i++){
for(int j = 1; j < n; j++){
dp[j] += dp[j - 1];
}
}
return dp[n - 1];
}