一、题目描述
二、解题思路
动态规划分四步走:
- 确定子问题:机器人在第[i][j]的位置都是从[i-1][j]或者[i][j-1]位置走过来的。
- 确定初始状态:f[0][0] = 1。
确定边界状态:当i=0或j=0,只有一种方式走过去,此时f[i][j]=1 - 转移方程:f[i][j]=f[i-1][j]+f[i]f[j-1]
- 计算顺序:从第0行计算到第m-1行
1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
1 | 3 | 6 | 10 | 15 | 21 | 28 |
表格中的数字代表机器人到达该位置时可以选择的路线数量dp[i][j]
,根据加法原理dp[i][j] = dp[i-1][j] + dp[i][j-1],因此就可以据此列出方程。
三、代码实现
var uniquePaths = function(m, n) {
const dp = new Array(m);
for (let i = 0; i < m; i++) {
dp[i] = new Array(n);
dp[i][0] = 1;
}
for (let j = 0; j < n; j++) {
dp[0][j] = 1;
}
for(let i=1;i<m;i++){
for(let j=1;j<n;j++){
dp[i][j] = dp[i-1][j] + dp[i][j-1]
}
}
return dp[m-1][n-1]
};