版权声明:版权所有,转载请注明出处。 https://blog.csdn.net/pdfcxc/article/details/84350856
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
解题思路:
n级台阶,假设有f(n)中跳法,第一步可以选择跳1级,则剩下(n-1)级台阶,(n-1)级台阶的跳法有f(n-1)种;如果第一步选择跳2级,则剩下(n-2)级台阶,(n-2)级台阶对的跳法有(n-2)种,所以n级台阶的跳法相当于(n-1)级台阶的跳法加上(n-2)级台阶的跳法,即f(n)=f(n-1)+f(n-2),剩下的可以以此类推。
我来再来考虑n小于等于0、n为1、n为2的情况。如果n<=0的话直接返回0。如果只有1阶台阶,则只有一种跳法,如果有2级台阶,则有两次跳法(第一种:每次跳一级,第二种:一次跳2级)
public class Solution {
public int JumpFloor(int target) {
/*递归解法*/
if(target<=0){
return 0;
}else if(target==1){
return 1;
}else if(target==2){
return 2;
}else{
return JumpFloor(target-1)+JumpFloor(target-2);
}
}
}
上面的解法是递归解法,递归的优点是简单易懂、代码量少,但是当递归的层数比较大的时候,重复计算的数据比较多,而且容易出现内存溢出的风险。所以可以采用迭代的方法来进行优化
public class Solution {
public int JumpFloor(int target) {
/*迭代解法*/
int zero=0;
int one=1;
int two=2;
if(target<=0){
return zero;
}else if(target==1){
return one;
}else if(target==2){
return two;
}else{
for(int i=2;i<target;i++){
zero=one+two;
one=two;
two=zero;
}
return zero;
}
}
}