乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。
問總共有多少條不同的路徑?
示例 1:
輸入: m = 3, n = 2
輸出: 3
解釋:從左上角開始,總共有 3 條路徑可以到達右下角。
向右 -> 向右 -> 向下
向右 -> 向下 -> 向右
向下 -> 向右 -> 向右
示例 2:
輸入: m = 7, n = 3
輸出: 28
1 <= m, n <= 100
題目資料保證答案小於等於 2 * 10 ^ 9
定義dp陣列元素的含義
我們的目的是從左上角到右下角一共有多少種路徑,那我們就定義 dp[i] [j]的含義為:當機械人從左上角走到(i, j) 這個位置時,一共有 dp[i] [j] 種路徑。那麼,dp[m-1] [n-1] 就是我們要的答案了。
找出關係陣列元素間的關係式
一種是從 (i-1, j) 這個位置走一步到達
一種是從(i, j - 1) 這個位置走一步到達
因為是計算所有可能的步驟,所以是把所有可能走的路徑都加起來,所以關係式是 dp[i] [j] = dp[i-1] [j] + dp[i] [j-1]。
找出初始值
dp[0] [0….n-1] = 1; // 相當於最上面一行,機械人只能一直往左走
dp[0…m-1] [0] = 1; // 相當於最左面一列,機械人只能一直往下走
class
solution
vectorint>>
dp(m+
1, vector<
int>
(n+1,0
));for
(int i =
0; i < m ; i ++
)for
(int i =
0; i < n; i ++
)for
(int i =
1;i < m ; i ++)}
return dp[m-1]
[n-1];
}};
LeetCode 62(動態規劃)
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 ...
leetcode 62 組合數 動態規劃
解法一 組合數 一共有m 1和n 1種向下或向右的走法,用組合數排序 from math import factorial class solution def uniquepaths self,m int,n int int return int factorial m n 2 factorial...
leetcode 62不同路徑(動態規劃 組合)
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?示例 1 輸入 m 3,n 7 輸出 28 示例2 輸入 m 3,n 2 輸出 3 解釋 從左上角開...