JavaScript零基础1000题【动规01】- 不同路径问题

188 阅读1分钟

题目链接:leetcode.cn/problems/un…

题目描述

图片.png

解题思路

  1. 我们利用动态规划思想解题,首先生成一个存储结果节点数组【二维数组,[m][n]】
  2. 当我们生成这个节点数组之后,我们首先想到,如果机器人需要移动到0,0点,那么他已经在0,0点了,他就不需要移动,所以这里默认是1。
  3. 如果说他要移动到0,1点,此时他是从左边往右边走。那么此时[0][1] = 1。当列大于0,但是行为0的时候,到达这个地方的步骤就是上一列的单元各结果相加过来
  4. 如果说机器人要移动到1,0点,此时他是从上面往下面走。与第三个步骤相同。区别在于到达这个地方的步骤就是上面一个行的第一个单元格的结果相加过来。
  5. 如果说机器人要到达1,1点的话,那么他就是上面那一个单元格的结果加左边那一个单元格的结果。就是移动到1,1单元格机器人需要的步数了。
  6. 返回动态规划数组中【m-1】【n-1】的结果

代码实现

/**
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var uniquePaths = function(m, n) {
    let f = Array.from(Array(m), () => new Array(n));
    f[0][0] = 1
    for(let i=0;i<m;i++){
        for(let j=0;j<n;j++){
            if(i>0&&j>0){
                f[i][j] = f[i-1][j]+f[i][j-1]
            }else if(i>0){
                f[i][j] = f[i-1][j]
            }else if(j>0){
                f[i][j] = f[i][j-1]
            }
        }
    }
    return f[m-1][n-1];
};