1. 程式人生 > >斐波那契數列問題及應用

斐波那契數列問題及應用

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             return
num2; 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         int
p = 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 }

斐波那契數列問題及應用