# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
count = 0
a = 0
b = 1
while count < n:
a,b = b,a+b
count += 1
return a
public class Solution {
public int Fibonacci(int n) {
int a = 0;
int b = 1;
int tmp = 0;
for(int count = 0;count < n;count ++){
tmp = a;
a = a + b;
b = tmp;
}return a;
}
}
实现代码贴上,实在是剑指offer上总结的棒棒的;
跳台阶问题,分解下,f(n)有两种情况,第一次跳一级台阶,那么共有f(n-1)中跳法,或者跳2级台阶,共有f(n-2)中跳法,所以还是斐波那契问题,牛客网上有个变态跳台阶问题,就是采用这种思路分析f(n) = f(n-1)+f(n-2)+..f(1)+f(0)
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
if number == 0:
return 0
if number == 1:
return 1
tmp = 1
for i in range(number):
tmp += self.jumpFloorII(i)
return tmp
public class Solution {
public int JumpFloorII(int target) {
int res = 1;
if(target == 0){
return 0;
}
if(target == 1){
return 1;
}
for(int i = 0;i<target;i++){
res += JumpFloorII(i);
}return res;
}
}
还有铺地板砖问题一样的,你有竖着放和横着放两放法,分别对应f(n-1)和f(n-2),这些在剑指offer上都有的
public class Solution {
public int RectCover(int target) {
if(target < 1){
return 0;
}
if(target == 1){
return 1;
}
if(target*2 == 2){
return 1;
}else if(target*2 == 4){
return 2;
}else{
return RectCover((target-1))+RectCover(target-2);
}
}
}