題目描述
思路分析
(1)確定狀態
最後一步:
子問題:
(2)轉移方程
(3)初始條件和邊界情況
(4)計算順序
C++實現
class Solution {
public:
// 使用動態規劃解題,能夠到達每個格子,只能是從他的上方或者左側到達
int uniquePaths(int m, int n) {
// 建立dp
// vector<vector<int>>dp(m, vector<int>(n, 0));
int[][] dp = new int[m][n]; //只用到0、1、2……m-1,故數組開m,不是m+1
for(int i=0; i<m; ++i){
for(int j=0; j<n; ++j)
if (i == 0 || j == 0) //初始化
dp[i][j] = 1;
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
return dp[m-1][n-1];
delete[][] dp;
}
};
//單獨初始化
// dp[0][0] = 1;
// for(int j=0; j<n; ++j) // 填充第一行(邊界)
// dp[0][j] = 1;
// for(int i=0; i<m; ++i) // 填充第一列(邊界)
// dp[i][0] = 1;