動態規劃 leetcode62 不同路徑 C

2021-10-06 07:40:02 字數 1186 閱讀 8455

乙個機械人位於乙個 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 解釋 從左上角開...