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;
}複製代碼