n<=39
java代码:
public class Solution {
public int Fibonacci(int n) {
int[] array = new int[n+1];;
if(n==0)
return 0;
if(n==1)
return 1;
array[0]=0;
array[1]=1;
int i =2;
while(i<=n){
array[i] = array[i-1]+array[i-2];
i=i+1;
}
return array[n];
}
}
变形题1:
题目描述
public int JumpFloor(int target) {
if(target == 1){
return 1;
}
if(target ==2 ){
return 2;
}
int[] a = new int[target];
a[0]=1;
a[1]=2;
for(int i=2;i<target;i++){
a[i]=a[i-1]+a[i-2];
}
return a[target-1];
}
}
public
class
Solution {
public
int
RectCover(
int
target) {
int
a =
0
;
int
b =
1
;
int
t =
1
;
while
(target -- >
0
){
t = a + b;
a = b;
b = t;
}
return
t;
}
变形题2:
题目描述
分析:
因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级
跳1级,剩下n-1级,则剩下跳法是f(n-1)
跳2级,剩下n-2级,则剩下跳法是f(n-2)
所以f(n)=f(n-1)+f(n-2)+...+f(1)
因为f(n-1)=f(n-2)+f(n-3)+...+f(1)
所以f(n)=2*f(n-1)
数列的方法啊~~~~~
得出最终结论,在n阶台阶,一次有1、2、...n阶的跳的方式时,总得跳法为:
| 1 ,(n=0 )
f(n) = | 1 ,(n=1 )
public
class
Solution {
public
int
JumpFloorII(
int
target) {
if
(target <=
0
) {
return
-
1
;
}
else
if
(target ==
1
) {
return
1
;
}
else
{
return
2
* JumpFloorII(target -
1
);
}
}
}