大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。
n<=39
//遞歸的思想
public class Solution {
public int Fibonacci(int n) {
if(n<=0){
return 0;
} else if(n==1 || n==2){
return 1;
} else{
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
}
一只青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法
//迭代的思想
public class Solution {
public int JumpFloor(int target) {
int temp_1=1,temp_2=2;
int result=3;
if(target<=0){
return 0;
} else if(target==1){
return 1;
} else if(target==2){
return 2;
} else{
for(int i=1;i<target-1;i++){
result=temp_1+temp_2;//考慮target=3 的情況,先算result
temp_1=temp_2;
temp_2=result;
}
return result; //n>=3的return值
}
}
}
一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
//f(n)=f(n-1)+f(n-2)+...f(0),f(n-1)不管前面的走法,只差一步到n級,以此類推。
//f(n-1)=f(n-2)+f(n-3)+...f(0),得到f(n)=2f(n-1)
public class Solution {
public int JumpFloorII(int target) {
if(target==0 || target==1){
return 1;
}else {
int result=1,temp=1;
for(int i=2;i<target+1;i++){
//迭代的思想
result=2*temp;
temp=result;
}
return result;
}
}
}
我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
/*
*考慮最后的情況,一個1*2 的矩形覆蓋 f(n-1),或者兩個2*1的矩形覆蓋 f(n-2);和為f(n-1)+f(n-2)
*/
public class Solution {
public int RectCover(int target) {
if(target==1){
return 1;
} else if(target==2){
return 2;
} else if(target<=0){
return 0;
}else{
int temp1=1,temp2=2;
int result=0;
for(int i=3;i<=target;i++){
result=temp1+temp2;
//更新temp1 的值
temp1=temp2;
//更新temp2 的值
temp2=result;
}
return result;
}
}
}
這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,方法如下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以后4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。然后你讓老板先借給你一瓶汽水,喝掉這瓶滿的,喝完以后用3個空瓶子換一瓶滿的還給老板。如果小張手上有n個空汽水瓶,最多可以換多少瓶汽水喝?
輸入3,10,81
輸出1,5,40
/*
*遞歸的思想,遞歸到底的條件是n=1,2,3 的情況。n=4 時可以考慮
drink的飲料數=先兌換的4/3+喝完空瓶兌換以及剩余空瓶兌換的(喝完的4/3+剩下的4%3)
*/
int softWater(int n){
if (n<=1){
return 0;
}
else if(n==2 || n==3){
return 1;
} else{
return n/3+softWater(n/3+n%3);
}
}