题目介绍:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路:
本题可以有两种思路,一种是通过组合排列来计算跳法总次数,一种是通过斐波那契数列特性来计算。
组合排列法:
本方法有一坑,就是在计算时,n 的值过大会导致排列组合数值的溢出,此处,通过随算随除的方式将排列组合的计算进行优化。
int jumpFloor(int number) {
int n2 = number / 2;
int num = 1;
for(int i = 1; i <= n2; i++){
int pn = number - i;
int dived = 1, div = 1;
for(int j = 1; j <= i; j++){
div *= (pn - j + 1);
div = div/j;//排列组合计算优化,随乘随除
}
num += (div/dived);
}
return num;
}
算法二:
通过观察从n=1到n=5跳台阶的方法数:1,2,3,5,8。
可发现上述排列符合斐波那契数列的特性,故大胆猜测本题所得序列也一定符合斐波那契数列的特性。故由之写出下面的程序。
int jumpFloor(int number){
if(number == 1) return 1;
if(number == 2) return 2;
int n1 = 1;
int n2 = 2;
int n = 0;
for(int i = 3; i <= number; i++){
n = (n1 + n2);
n1 = n2, n2 = n;
}
return n;
}
来源:CSDN
作者:Fake_Killer
链接:https://blog.csdn.net/qq_35859033/article/details/103479296