题目
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
1.假设第一次跳的是一阶,那么剩下的是n-1个台阶,跳法为f(n-1)
;
2.假设第一次跳的是二阶,那么剩下的是n-2个台阶,跳法为f(n-2)
;
3.总跳法f(n)
=f(n-1)
+f(n-2)
4.根据实际情况,f(1)=1
,f(2)=2
,由此可得到一个斐波那契数列
斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
Java
递归法:
时间复杂度: O(2^n)
空间复杂度:递归栈的空间
public int jumpFloor(int target) {
if (target <= 0) {
return -1;
} else if (target == 1) {
return 1;
} else if (target ==2) {
return 2;
} else {
return jumpFloor(target-1)+jumpFloor(target-2);
}
}
动态规划
时间复杂度:O(n)
空间复杂度:O(1)
public int jumpFloor(int target) {
if(target ==1 || target ==2) {
return target;
}
int first = 1;
int second = 2;
int result= 0;
for(int i = 3; i <= target; i++) {
fibn = first + second;
first = second;
second = result;
}
return result;
}
Python
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
p = 0
q = 1
r = 1
for i in range(number-1):
p = q
q = r
r = p+q
return r