今天在做这道题时想到用排列组合的方式求,但由于需要使用阶乘,导致在n>22的时候出现了结果不正确,但是没有报错,应为long字段溢出,因为21!=51090942171709440000, 而java中Long的最大值为9223372036854775807,记录一下这个错误
class Solution {
public int climbStairs(int n) {
int p=n/2; //最多可以有几个2
int a=p-1; //C(b,a)
int b=p+1;
int results=2;
if(n<4){
return n;
}
if(n%2==0){
for(int i=1;i<p;i++){
results+=factorial(b)/(factorial(a)*factorial(b-a));
b++;
a--;
}
}else{
b++;
results+=p;
for(int i=1;i<p;i++){
results+=factorial(b)/(factorial(a)*factorial(b-a));
b++;
a--;
}
}
return results;
}
//阶乘计算
public long factorial(long number) {
if (number <= 1)
return 1;
else
return number * factorial(number - 1);
}
}