一:题目
二:上码
class Solution {
public:
/**
思路:
1.分析题意:
2.动态规划五步走:
1>:确定dp数组和其下标的含义
dp[i][j]为到达二维数组下标为i,j的路径条数,i和j为下标
2>:确定dp数组的递推公式
那么dp[i][j]是如何求解出来的呢?只能是两个方向
左边:dp[i-1][j]
上边:dp[i][j-1]
那么dp[i-1][j]代表的是从坐标(0,0)点开始到dp[i-1][j]的路径条数
dp[i][j-1]同理
3>:确定dp数组的初始化
那么在二位数组范围内最上边一行和最左边一列都是1,因为到这个路径均是1
所以:
for(int i = 0; i < n; i++) {
dp[0][i] = 1;
}
for(int j = 0; j < m; j++) {
dp[j][0] = 1;
}
4>:确定dp数组的遍历顺序
从左向右的遍历。
5>:举例验证dp数组
m = 3,n = 7;
1 1 1 1 1 1 1
1 2 3 4 5 6 7
1 3 6 10 15 21 28
*/
int uniquePaths(int m, int n) {
int dp[m][n];
for(int j = 0; j < n; j++) {//列在变
dp[0][j] = 1;
}
for(int i = 0; i < m; i++) {//行在变
dp[i][0] = 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];
}
}
return dp[m-1][n-1];
}
};