题目描述
题目是比较容易理解的,从左上角元素走到右下角元素一共有多少种走法
明确一点到达当前位置的方法由到达左边位置和上面位置的方法数决定 因此可以用动态规划进行解题。
这个题目中状态方程是比较好写的,难点在于dp数组的初始化
代码实现
class Solution {
public:
int uniquePaths(int m, int n) {
if(m==1 && n== 1)
{
return 1;
}
vector<vector<int>> dp(m, vector<int>(n));
for(int i = 0; i < m; i++)
{ // 第一行均为1
dp[i][0] = 1;
}
for(int j = 0; j < n; j++)
{ // 第一列均为1
dp[0][j] = 1;
}
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];
cout << i << j << ": " << dp[i][j] << endl;
}
}
return dp[m-1][n-1];
}
};