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

 1 class Solution {
 2 public:
 3     long long FA(long long a) //定义阶乘函数FA
 4     {
 5         long long x = 1;//定义变量b
 6         for (int i = 1; i <= a; i++)//计算阶乘 
 7             x *= i;
 8         return x;//返回值得到b=a! 
 9     }
10 
11     long long FA(long long a, long long b) //定义阶乘函数FA
12     {
13         //long long b = 1;//定义变量b    
14         long long x = 1;
15         for (int i = b; i <= a; i++)//计算阶乘 
16             x *= i;
17         return x;//返回值得到b=a! 
18     }
19 
20     int uniquePaths(int m, int n) {
21         long long a = FA(m - 1 + n - 1, max(m, n));
22         long long b = FA(min(m, n) - 1);
23         return (int)(a / b);
24     }
25 };

 

补充一个使用dp的方案,python 实现:

 1 class Solution:
 2     def uniquePaths(self, m: 'int', n: 'int') -> 'int':
 3         dp =[[0 for col in range(n)] for row in range(m)]        
 4         for i in range(m):
 5             dp[i][0] =  1
 6 
 7         for j in range(n):
 8             dp[0][j] = 1
 9         print(dp)
10         for i in range(1,m):
11             for j in range(1,n):
12                 dp[i][j] = dp[i-1][j] + dp[i][j-1]
13         return dp[m-1][n-1]

初始化index==0的行和index==0的列,起点为0,其他都是1(黑色)。

然后从(1,1)开始计算,可以一行一行的计算,也可以一列一列的计算,也可以按对角线计算,总之一步一步的推进,一直计算到(i,j)元素(红色),即为所求。

注意,dp[i][j]==dp[m-1][n-1]。

posted on 2018-10-03 13:33  Sempron2800+  阅读(235)  评论(0编辑  收藏  举报