斐波那契數列問題及應用
阿新 • • 發佈:2018-08-14
for 斐波那契數 不同 輸出 多少 mat bsp ring oid
第一題:
大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39
代碼如下:
1 public class offer7 { 2 public static int Fibonacci(int n) { 3 int num1 = 0; 4 int num2 = 1; 5 int p = 0; 6 if(n==0){ 7 return num1; 8 } 9 if(n==1){ 10 returnnum2; 11 } 12 for(int i=0;i<n-1;i++){ 13 p = num1 + num2; 14 num1 = num2; 15 num2 = p; 16 } 17 return p; 18 } 19 public static void main(String[] args){ 20 int m = Fibonacci(8); 21 System.out.println(m); 22} 23 } 24 //0 1 1 2 3 5 8 13 21 34
第二題:
一只青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)
/*
* 找規律
* 一階臺階:1
* 2:2
* 3:3
* 4:5
* 5:8
* 6:13
* 就是菲波那切數列
*/
代碼如下:
1 public class offer8 { 2 public int JumpFloor(int target) { 3 int num1 = 0; 4 int num2 = 1; 5 intp = 0; 6 if(target==0){ 7 return 0; 8 } 9 if(target==1){ 10 return num2; 11 } 12 for(int i=0;i<target;i++){ 13 p = num1 + num2; 14 num1 = num2; 15 num2 = p; 16 } 17 return p; 18 } 19 }
第三題:
一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法
還是找規律,規律如下
0階臺階:0
1階臺階:1
2階臺階:2
3階臺階:4
4階臺階:8
。。。
n階臺階:Math.pow(2,n-1)
代碼如下:
1 public class offer9 { 2 public int JumpFloorII(int target) { 3 if(target<=0){ 4 return 0; 5 } 6 return (int) Math.pow(2,target-1); 7 } 8 }
第四題:
我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
依舊找規律,仍然是轉化為斐波那契數列問題
代碼如下:
1 public class Solution { 2 public int RectCover(int target) { 3 int num1 = 0; 4 int num2 = 1; 5 int p = 0; 6 if(target==0){ 7 return 0; 8 } 9 for(int i=0;i<target;i++){ 10 p = num1 + num2; 11 num1 = num2; 12 num2 = p; 13 } 14 return p; 15 } 16 }
斐波那契數列問題及應用