https://leetcode-cn.com/problems/unique-paths/
一個機器人位于一個 m x n 網格的左上角 (起始點在下圖中標記為 “Start” )。
機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為 “Finish” )。
問總共有多少條不同的路徑?
我的方法一:動態規劃
步驟
- 確認狀態
1.1 最后一步:到達第(m, n)點,或者從(m-1, n)過來,或者從(m, n-1)過來
1.2 子問題:f(m, n)可以轉化為f(m-1, n)和(m, n-1)兩個問題 - 轉移方程
f(m, n) = f(m-1, n) + f(m, n-1) - 初始條件和邊界條件
3.1 m>0, n>0
3.2 f(1, 1) = 1, f(*, 0) = 0, f(0, *) = 0 - 計算順序
f(1, 1), f(1,2), f(2,1) f(m, n)
復雜度
時間復雜度:O(mxn)
空間復雜度:O(mxn)
代碼
class Solution {
public:
int uniquePaths(int m, int n) {
if(m < 1 || n<1){
return 0;
}
int ** f = new int*[m+1];
for(int i = 0; i<=m; i++){
f[i] = new int[n+1];
for(int j = 0; j<=n; j++){
f[i][j] = 0;
}
}
f[1][1] = 1;
for(int i = 1; i<=m; i++){
for(int j = 1; j<=n; j++){
if(i>1 || j>1){
f[i][j] = f[i][j-1]+f[i-1][j];
}
}
}
int count = f[m][n];
for(int i = 0; i<=m; i++){
delete[] f[i];
f[i] = 0;
}
delete[] f;
f = 0;
return count;
}
};