码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode62

时间:2018-10-04 09:18:25      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:track   double   backtrac   需要   i++   分支   style   for   递归   

使用排列组合计算公式来计算,注意使用long long型数据保证计算不会溢出。

class Solution {
public:
    int M, N;
    int X = 0;
    //从根到叶子有多少个分支,就表示有多少种路径
    //解空间是一个包含{0,1}的集合,总共有(m-1)+(n-1)个元素。
    void BackTrack(int x, int y)
    {
        if (x == M &&y == N)
        {
            //到达叶子节点
            X++;
            return;
        }
        if (x < M)
        {
            BackTrack(x + 1, y);
        }
        if (y < N)
        {
            BackTrack(x, y + 1);
        }
    }

    long long FA(long long a) //定义阶乘函数FA
    {
        long long x = 1;//定义变量b
        for (int i = 1; i <= a; i++)//计算阶乘 
            x *= i;
        return x;//返回值得到b=a! 
    }

    long long FA(long long a, long long b) //定义阶乘函数FA
    {
        //long long b = 1;//定义变量b    
        long long x = 1;
        for (int i = b; i <= a; i++)//计算阶乘 
            x *= i;
        return x;//返回值得到b=a! 
    }

    int uniquePaths(int m, int n) {
        //M = m - 1;
        //N = n - 1;
        //BackTrack(0, 0);
        //return X;
        //单纯计算数量,可以不用递归,只需要计算选择数即可
        /*double res = 1;
        for (int i = 1; i <= n - 1; i++)
            res *= ((double)(m + i - 1) / (double)i);
        return (int)round(res);*/
        long long a = FA(m - 1 + n - 1, max(m, n));
        long long b = FA(min(m, n) - 1);
        return (int)(a / b);
    }
};

 

leetcode62

标签:track   double   backtrac   需要   i++   分支   style   for   递归   

原文地址:https://www.cnblogs.com/asenyang/p/9739666.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!