zoukankan      html  css  js  c++  java
  • leetcode第一刷_Unique Paths

    从左上到右下,仅仅能向右或向下,问一共同拥有多少种走法。

    这个问题当然能够用递归和dp来做,递归的问题是非常可能会超时,dp的问题是须要额外空间。

    事实上没有其它限制条件的话,这个问题有个非常easy的解法。给定一个格子。如果是m*n的。从左上角走到右下角的总步数是确定了的,(m+n-2)嘛,即在竖直方向一定要走m-1步。在水平方向一定要走n-1步。那有多少种解法就相当于确定什么时候往下走,什么时候往右走,也即相当于从这m+n-2步中。挑选出m-1步有多少种挑法,由于剩下的肯定要往右走嘛。问题实际上就是求c(m+n-2 , m-1)。当然也等于c(m+n-2,n-1),详细用哪一个能够挑个小的好算的。

    int getNum(int sum, int part){
        if(part==0||part==sum)
            return 1;
        long long mpart = 1;
        for(int i=2;i<=part;i++)
            mpart *= i;
        long long msum = 1;
        for(int i=sum-part+1;i<=sum;i++)
            msum *= i;
        return (int)(msum/mpart);
    }
    
    
    class Solution {
    public:
        int uniquePaths(int m, int n) {
            return getNum(m+n-2, min(m-1, n-1));
        }
    };


  • 相关阅读:
    四月书籍
    iOS 第三方登录之 QQ登录
    百度面试经验之谈 ----------转
    OC浅析一
    书目列表
    UIStroryboard分类
    ios基础笔记(一)
    IOS笔记-代码块(微博项目)-1.0
    IOS控件内容 对齐方式
    android同一个TextView设置不同颜色字体
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5103601.html
Copyright © 2011-2022 走看看