leetcode62
Posted AsenYang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode62相关的知识,希望对你有一定的参考价值。
使用排列组合计算公式来计算,注意使用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的主要内容,如果未能解决你的问题,请参考以下文章