python複習12/10----類
阿新 • • 發佈:2020-12-13
一個機器人位於一個 m x n
網格的左上角 (起始點在下圖中標記為“Start” )。
機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。
問總共有多少條不同的路徑?
例如,上圖是一個7 x 3 的網格。有多少可能的路徑?
示例 1:
輸入: m = 3, n = 2
輸出: 3
解釋:
從左上角開始,總共有 3 條路徑可以到達右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
示例 2:
輸入: m = 7, n = 3 輸出: 28
提示:
1 <= m, n <= 100
- 題目資料保證答案小於等於
2 * 10 ^ 9
解答
經典地動態規劃問題:
class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> temp(n, 1);
vector<vector<int>> dp(m, temp);
for(int i = 1; i < m; i++){
for(int j = 1; j < n; j++){
dp[ i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
};
當然也可以直接推導公式求 C m + n − 2 m − 1 C^{m-1}_{m+n-2} Cm+n−2m−1:
class Solution {
public:
int uniquePaths(int m, int n) {
long long ans = 1;
for (int x = n, y = 1; y < m; ++x, ++y) {
ans = ans * x / y;
}
return ans;
}
};
作者:LeetCode-Solution
連結:https://leetcode-cn.com/problems/unique-paths/solution/bu-tong-lu-jing-by-leetcode-solution-hzjf/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。