1. Fibonacci Number
题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39
啊没啥好说的就是斐波那契数,递推就是典型的 F [ n ] = F [ n − 1 ] + F [ n − 2 ] F[n] = F[n-1]+F[n-2] F[n]=F[n−1]+F[n−2]然后是从第0项开始的,并且注意到 n<=39,说明空间复杂度并不高,需要以空间换时间
public class Solution {
int[] F=new int[41];
public void init(){
F[0]=0;
F[1]=1;
for(int i=2;i<=40;i++)
{
F[i]=F[i-1]+F[i-2];
}
}
public int Fibonacci(int n) {
this.init();
return F[n];
}
}
2. 青蛙跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路与上题一致
public class Solution {
int[] F=new int[1001];
public void init(){
F[1]=1;
F[2]=2;
for(int i=3;i<=1000;i++)
{
F[i]=F[i-1]+F[i-2];
}
}
public int FloorJump(int n) {
this.init();
return F[n];
}
}
3. 变态跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:由前两题的递推思路可得,
F
[
n
]
=
F
[
n
−
1
]
+
F
[
n
−
2
]
+
.
.
.
+
F
[
1
]
F
[
n
−
1
]
=
F
[
n
−
2
]
+
F
[
n
−
3
]
+
.
.
.
+
F
[
1
]
F[n]=F[n-1]+F[n-2]+...+F[1]\\F[n-1]=F[n-2]+F[n-3]+...+F[1]\\
F[n]=F[n−1]+F[n−2]+...+F[1]F[n−1]=F[n−2]+F[n−3]+...+F[1]
由此可得
F
[
n
]
=
F
[
n
−
1
]
+
F
[
n
−
1
]
=
2
∗
F
[
n
−
1
]
F[n]=F[n-1]+F[n-1]=2*F[n-1]
F[n]=F[n−1]+F[n−1]=2∗F[n−1]
是一个等比数列
public class Solution {
int[] F=new int[1001];
public void init(){
F[1]=1;
for(int i=2;i<=1000;i++)
{
F[i]=2*F[i-1];
}
}
public int JumpFloorII(int target) {
this.init();
return F[target];
}
}