题目
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?

例如,上图是一个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];
};
机器人位于m x n网格的左上角,只能向下或向右移动,目标是达到右下角。求解不同路径的数量。采用动态规划方法,初始化第一行和第一列的路径数为1,然后逐行更新,最后数组的最后一个元素即为答案。JavaScript实现代码见文。
2192

被折叠的 条评论
为什么被折叠?



