还是先找关系
N | 方法 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 5 |
关系式 N = N-1 + N-2
JAVA:
❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️
public class Solution {
public int RectCover(int target) {
int[] save ={0,1,2};
if(target>=0 && target <3)
return save[target];
int all = 0;
int first = 2;
int end =1;
for(int i = 3;i<= target;i++){
all = first + end;
end = first;
first = all;
}
return all;
}
}
❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️
从斐波那契那题到现在这个都是考察的斐波那契不要用递归(效率低),用迭代。
就是找n与最后所求的f(n)的关系,就和求时间复杂度最内层循环的次数一样
斐波那契:f(n)=f(n-1)+f(n-2)
小青蛙:f(n)=f(n-1)+f(n-2)
super小青蛙:f(n)=f(n-1)+2*f(n-2)
矩阵:f(n)=f(n-1)+f(n-2)
通解:三个三连
(1)上来三连
n<=0
return 0;
n==1
return1
n==2;
return 2;
(2)再来变量三连
fn1=2;/fn1=1; 看题
fn2=1;
res=0;
(3)一个for循环三连
for(int i=3;i<=n;i++){
res=f(n)的表达式;
fn2=fn1;
fn1=res; }
//有的人会在这里看了很多人的代码,
发现有的相反,是fn1,fn2的定义不一样 我定义的fn1是在下次循环的时候,
fn1代表了(n-1),
fn2是在下次循环的时候,fn2代表了(n-2),
如果 fn1=fn2 那么无所谓,如果不相等,就要自己弄明白