从排列组合的角度考虑,把跳2阶当作黑球,跳1阶当作白球。问题就转化为,可以用多少个黑球以及黑球和白球的排列方法有几种。需要注意的是,用int会发生 浮点错误。
class Solution {
public:
int jumpFloor(int number) {
double sum = 0;
int one;
for(int two = 0; two <= number/2; two++){
one = number - two * 2;
sum += 1.0* factorial(one+two)/(factorial(one) * factorial(two));
}
return sum;
}
double factorial(int n){
double r = 1;
for(int i = 1; i <= n; i++)
r *= i;
return r;
}
};
京公网安备 11010502036488号