第八题:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路:n = 0时,有0种跳法,n=1时有1种,n=2时有2种,当n>=3时,若第一步跳一级,则剩下的n-1级台阶有f(n-1)种跳法,若第一步跳两级,则剩下的n-2级台阶有f(n-2)种跳法,f(n)=f(n-1) + f(n-2),由此发现各种级数的台阶的跳法顺序组成的数列是斐波拉契数列,因此该问题转化为第七题,求斐波拉契数列的第n位的数,一样由于会存在栈的溢出问题,不能用递归求解,正确的解法与第七题一样采用循环的方式。
Python:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
# write code here
if number == 0:
return 0
elif number == 1:
return 1
elif number == 2:
return 2
else:
f1 = 1
f2 = 2
while number > 2:
number = number - 1
sum = f1 + f2
f1 = f2
f2 =sum
return sum
Java:
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{
int f1 = 1;
int f2 = 2;
int sum = 0;
while(target > 2){
target = target - 1;
sum = f1 + f2;
f1 = f2;
f2 = sum;
}
return sum;
}
}
}