
还是先找关系
| 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 那么无所谓,如果不相等,就要自己弄明白
本文深入探讨了使用迭代法而非递归法解决斐波那契数列及类似问题的方法,通过具体实例讲解了如何找到n与f(n)的关系,从而提高算法效率。文章提供了详细的JAVA代码实现,适用于小青蛙跳台阶、super小青蛙跳台阶和矩阵覆盖等问题。
4945

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



