使用排列组合计算公式来计算,注意使用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]。