62.

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-paths

思路1:时间换空间;

将问题转换为数学问题,以(7,3)为例,往右走6次,往下走2次,即有(6+2)!种排列组合,去掉重复组合6!和2!,结果为8! / 6! / 2!。再根据规律

1*2*3*4*5*6*7*8

1*2*3*4*5*6

1*2

第一个式子可以抵消第二个或第三个式子,而且抵消后,式子1剩下的数刚好和剩下的式子数字数量相等,不必每次都从开始进行计算

/**
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var uniquePaths = function(m, n) {
    let sum=1;
    let j=1;
    let memory=1;
    for(let i=m;i<=m+n-2;i++){
        if(i%j==0){
            sum*=i/j;
        }
        else{
            sum*=i;
            memory*=j;
        }
        j++;
    }
    return sum/memory;
};

思路2:空间换时间,没有那么多花里胡哨,直接按公式计算

/**
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var uniquePaths = function(m, n) {
    return mult(m+n-2)/mult(m-1)/mult(n-1);
    function mult(data){
        return data<=1? 1: data*mult(data-1);
    }
};

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!