LeetCode62. 不同路径

题目

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

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

问总共有多少条不同的路径?
Alt
例如,上图是一个7 x 3 的网格。有多少可能的路径?

说明:m 和 n 的值均不超过 100。

示例1
输入: m = 3, n = 2
输出: 3
解释: 从左上角开始,总共有 3 条路径可以到达右下角。
		1. 向右 -> 向右 -> 向下
		2. 向右 -> 向下 -> 向右
		3. 向下 -> 向右 -> 向右
示例2
输入: m = 7, n = 3
输出: 28

分析

这道题动态规划很好理解

对于我们到达的任意第(x, y)个格子,要么来自(x-1, y),要么来自(x, y - 1),我们将来自它们的路径之和相加,即为到达第(x, y)个格子的路径数目

那么我们应该怎么实现呢?

我们使用一个一维数组L来存放到第i行每个格子的路径数量,不断的更新该数组

因为对于第1行的所有格子,都只能从左向右到达,因此路径数目均只有1条,L的初始值全部为1

从第2行开始,对于每行的第1个格子,只能从上向下到达,路径数目只为1

当我们计算到第(x, y)格子

L[y-1]中存放的为到达第(x, y-1)个格子的路径数目

L[y]中存放的为到达第(x-1, y)个格子的路径数目

我们更新L[y]中的数据

L[y] = L[y] + L[y - 1];

依此类推,当循环结束,L数组中存放的即为最后一行的路径数目

最后一个下标对应的数字即为我们需要的答案

JavaScript代码

/**
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var uniquePaths = function(m, n) {
    var row = n;
    var col = m;
    if(row == 0 || col == 0) return 0;
    var l = new Array();
    for(var i = 0; i < row; i++) {
        // l[i] = new Array();
        for(var j = 0; j < col; j++) {
            if(j == 0) {
                l[j] = 1;
            }
            else if(i == 0) {
                l[j] = 1;
            }
            else {
                l[j] = l[j - 1] + l[j];
            }
        }
    }
    return l[col - 1];
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值