题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
一、解题思路
遇到这一类型的题目,上来只是想肯定解不了,我们可以进行归纳总结:
-
如果只有1级台阶,那么显然只有一种跳法
f ( 1 ) = 1 f(1) = 1 f(1)=1 -
如果有2级台阶,那么就有两种跳法:一种是分两次跳,每次跳1级;另外一种是一次跳2级
f ( 2 ) = 2 f(2) = 2 f(2)=2
- 如果有
n
,
n
>
2
n,n>2
n,n>2 级台阶,第一次跳的时候有两种不同的跳法:一种是第一次跳1级台阶,那么还剩
n
−
1
n-1
n−1 级台阶,剩下来的
n
−
1
n - 1
n−1级台阶有
f
(
n
−
1
)
f(n - 1)
f(n−1) 种跳法;另外一种是第一次跳2级台阶,那么还剩
n
−
2
n - 2
n−2级台阶,剩下来的
n
−
2
n-2
n−2级台阶有
f
(
n
−
2
)
f(n-2)
f(n−2)种跳法,因此
n
n
n 级台阶的不同跳发的总数为:
f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n) = f(n-1) + f(n-2) f(n)=f(n−1)+f(n−2)
这就是斐波那锲数列
二、Java代码
public class Solution {
public int JumpFloor(int target) {
if(target <= 2){
return target;
}
int tmp[] = {1, 2};
int result = 0;
for(int i = 2; i < target; i++){
result = tmp[0] + tmp[1];
tmp[0] = tmp[1];
tmp[1] = result;
}
return result;
}
}
三、C++代码
class Solution {
public:
int jumpFloor(int number) {
if(number <= 2){
return number;
}
int tmp[] = {1, 2};
int result = 0;
for(int i = 2; i < number; i++){
result = tmp[0] + tmp[1];
tmp[0] = tmp[1];
tmp[1] = result;
}
return result;
}
};
四、Python3代码
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
# write code here
if number <= 2:
return number;
tmp = [1, 2]
result = 0
for i in range(2, number):
result = tmp[0] + tmp[1]
tmp[0] = tmp[1]
tmp[1] = result
return result