动态规划-62. 不同路径

题目描述

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

image

思路分析

回顾之前的动态规划部分的题,每一个当前状态都可以由之前的状态确定下来
那么思考一下这道题,当前的路线能不能由之前的路线确定下来?
当然是可以的 ,第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]
}
posted @ 2022-10-31 10:26  含若飞  阅读(17)  评论(0编辑  收藏  举报