【js算法】动态归回dp----不同路径(详细解答,一看就懂)

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

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

问总共有多少条不同的路径
在这里插入图片描述
【思路】
最后的终点有两条路径 从上边一格进入或者从左边 一格进入;
给每一个格子一格值,表示走入这个格子的走法,那么, 最后一个格子的走法 = 上边一个格子的走法 + 左边一格格子的走法
找到动态规划的公式之后

【代码】

/**
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var uniquePaths = function(m, n) {
    if(m===1&&n===1){return 1}; //如果是一行一列的话就只有一种走法
    let data=[]; rows=[0]; //data表示存储值的容器;rows表示每一行对应列初始值
    for(let i=0; i<n-1; i++){
        rows.push(1);//n 表示的是有多少列,这一步表示的是给第一行的每一列一个初始值1
    }
    data.push(rows) //然后将第一行添加到这个数据容器中
    for(let i=0; i<m-1; i++){
        data.push([1]) //m表示的是 有多少行,这一步表示的是给这个容器的第一列添加m-1行数据,对应的,每一行的数据都是一个数组,数组中的每一项的值对应的是相应行相应列的“走法”
    }
    //下边是一个模拟的 m=3,n=4的数据
    //data = [
	//	[0,1,1,1,1],
	//	[1],
	//	[1],
	//  [1],
	//]
    for(let i=1; i<m; i++){
        for(let j=1; j<n; j++){
            data[i][j]=data[i-1][j]+data[i][j-1] //对数据容器进行遍历,从第一行第一列开始(显然由上可得,只有一种)
            //m 表示行, m=1的时候,第j列的值应该是 data[1][j] = data[0][j] + data[1][j-1] 
            // 假设此时 j=1, data[1][1] = data[0][1] + data[1][0] = 1 + 1 = 2
        }
    }
    return data[m-1][n-1]
    // 至于为什么最终返回的是 [m-1][n-1],可以看上边模拟出来的data容器中的数据,m表示行,n表示列,在模拟的数据容器中,用户需要的数据是data[m-1][n-1]
};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值