学算法,数据结构的话动态规划,递归是永远躲不去的坑,今天带大家看几道斐波那契数列数,平时这种问题在课堂上一般都是用递归的方法写的,可是一般的递归又看不懂到底核心是啥情况,这次的算法,我用非递归写斐波那契数列,希望能帮助大家入个门,而且实际上非递归效率更高。 这次选的是剑指Office中的几道题。
public class Solution {
public int Fibonacci(int n) {
if(n<=0) {
return 0;
}
if(n==1) {
return 1;
}
returnFibonacci(n-2)+Fibonacci(n-1);
}
}
以及一般不会教授的非递归版
public class Solution {
public int Fibonacci(int n) {
if(n<=0) return(0);
else if(n<=2) return(1);
int a=1;
int b=1;
int sum = 0;
for(int i=3;i<=n;i++){
sum = a+b;
a= b;
b = sum;
}
return sum;
}
}
第一题当然很简单,同类的还有跳台阶
public class Solution {
public int JumpFloor(int target) {
if(target <4)
return target;
else {
int temp1=1;
int temp2 = 2;
int temp = 3;
for(int i=3;i<=target ;i++){
temp = temp1+temp2;
temp1 = temp2;
temp2 = temp;
}
return temp;
}
}
}
以及矩阵覆盖问题
public class Solution {
public int RectCover(int target) {
if(target == 1)
return 1;
if(target == 2)
return 2;
int a=1;
int b=2;
int sum = 0;
for(int i=3;i<=target;i++){
sum = a+b;
a=b;
b=sum;
}
return sum;
}
}