原题
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
Reference Answer
解题思路:
典型回溯法,递归也能用,就是效率低。
同第8题斐波那契数列一模一样,换了个情景而已。。
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
# write code here
res = []
res.append(0)
res.append(1)
res.append(2)
#res[n] = res[n-1] + res[n-2]
if number > 2:
for i in range(3, number+1):
res.append(res[i-2] + res[i-1])
return res[number]
该算法保存了中间结果,因此时间复杂度为O(n),空间复杂度为O(n);
优化版:
不再保留中间结果,将空间复杂度降低为O(1);
代码如下:
Python Version:
class Solution {
public:
int Fibonacci(int n) {
int f = 0;
int g = 1;
while (n--) {
g = g + f;
f = g - f;
}
return f;
}
};
C++ Version:
class Solution {
public:
int jumpFloor(int number) {
int base0 = 0, base1 = 1, base2 = 2;
int res = 0;
if (number == 0){
return base0;
}
else if(number == 1){
return base1;
}
else if(number == 2){
return base2;
}
for(int i = 3; i <= number; ++i){
res = base1 + base2;
base1 = base2;
base2 = res;
}
return res;
}
};

本文详细解析了青蛙跳台阶问题,这是一个经典的动态规划问题,也是斐波那契数列的实际应用。文章提供了两种算法实现,一种是使用数组保存中间结果,时间复杂度为O(n),空间复杂度为O(n);另一种是优化版,不保留中间结果,将空间复杂度降低到O(1)。
903

被折叠的 条评论
为什么被折叠?



