public int JumpFloor(int n) {
if (n < 1) {return -1;}
if (n == 1) {return 1;}
if (n == 2) {return 2;}
int result = 0, temp1 = 1, temp2 = 2, count = 0;
while (count != n - 2) {//由于count==1的时候,result是3级时的结果,以此类推,n级时,count==n-2
result = temp1 + temp2;
temp1 = temp2;
temp2 = result;
count++;
}
return result;
}复制代码
跳上第n阶台阶,有多少种跳法?java
public static int JumpFloorII(int n) {
int result=1;
for(int i=1;i<=n-1;i++){
result=result*2;
}
return result;
}复制代码
若第一个矩形横着填充,那么它下面的两个格子只能一样横着填充,问题就变成了求填充2*(n-2)大矩形的方法数算法
解法以下:spa
// 解法1:算法简洁但效率较低(不推荐)
public int Fibonacci(int n,String mark) {
if(n<=0){
return 0;
}
if(n==1){
return 1;
}
return Fibonacci(n-1)+Fibonacci(n-2);
}
// 解法2:思路清晰且效率高
public static int Fibonacci(int n) {
if (n <= 0) {
return 0;
}
if (n == 1) {
return 1;
}
int result = 0, temp1 = 0, temp2 = 1, count = 0;
while (count != n - 1) {
result = temp1 + temp2;
temp1 = temp2;
temp2 = result;
count++;
}
return result;
}复制代码