排列
// A(m,n)
private long a(long m, long n) {
long res = 1;
for (long i = m; i > m - n; i--) {
res *= i;
}
return res;
}
组合
//C(m,n)
private static int c(int m,int n){
//temp 为答案
double temp = 1;
//保证n>=m-n,C(m,n)只要计算min(n,m-n)次就可以了
if(n<m-n)
return c(m,m-n);
for(int i=0;i<m-n;++i){
temp*=n+i+1;
temp/=i+1;
}
return (int)temp;
}
完整代码
class Solution {
// A(m,n)
private long a(long m, long n) {
long res = 1;
for (long i = m; i > m - n; i--) {
res *= i;
}
return res;
}
private static int c(int m,int n){
//temp 为答案
double temp = 1;
//保证n>=m-n,算C(m,n)只要计算min(n,m-n)次就可以了
if(n < m-n)
return c(m,m-n);
for(int i=0;i<m-n;++i){
temp*=n+i+1;
temp/=i+1;
}
return (int)temp;
}
public int uniquePaths(int m, int n) {
return c(m+n-2,m-1);
}
}
相关题目链接