zoukankan      html  css  js  c++  java
  • leetcode不同路径

    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);
        }
    };
  • 相关阅读:
    sublime c/c++ 环境
    sublime编写markdownm
    第八次课程作业
    第七次课程作业
    第六次作业
    第五次课程作业
    Arithmatic项目修改总结
    第四次课程作业
    第三次课程作业
    课程作业二
  • 原文地址:https://www.cnblogs.com/tenfly/p/11758432.html
Copyright © 2011-2022 走看看