动态规划-62. 不同路径
题目描述
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
思路分析
回顾之前的动态规划部分的题,每一个当前状态都可以由之前的状态确定下来
那么思考一下这道题,当前的路线能不能由之前的路线确定下来?
当然是可以的 ,第m行n列的状态可以由m-1行n-1列的状态来确定
也就是说
dp[m][n] = dp[m-1][n] + dp[m][n-1]
代码示例
var uniquePaths = function(m, n) {
// 生成二维数组
const dp = new Array(m).fill('').map(item=>new Array(n).fill(1))
// 因为是m行n列,数组索引是从0开始的,所以索引只能取到m-1和n-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]
};
//使用一维滚动数组来维护dp数组
const uniquePaths = function(m,n) {
let dp = new Array(n).fill(1)
console.log(dp)
for(let i= 1;i<m;i++) {
for(let j = 1;j<n;j++) {
dp[j]+=dp[j-1]
}
}
return dp[n-1]
}