1. 程式人生 > >劍指Offer每日六題(JAVA版)之第二天

劍指Offer每日六題(JAVA版)之第二天

斐波那契數列:

大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。

n<=39

解答:

這個是一個最簡單的斐波那契題目,斐波那契特點:後一個數是前兩個數的和

public class Solution {
    public int Fibonacci(int n) {
        int []F = new int[100];
        F[0] = 0;
        F[1] = 1;
        for(int i=2;i<=n;i++)
            F[i] = F[i-1]+F[i-2];
        return F[n];
    }
}

跳臺階

一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)

解答:

這個題目我們寫出幾個數,就會發現其實就是一個斐波那契數列的變換,就不多說了

public class Solution {
    public int JumpFloor(int target) {
        int F[] = new int[100];
        F[0] = 0;
        F[1] = 1;
        F[2] = 2;
        for(int i=3;i<=target;i++)
            F[i] = F[i-1]+F[i-2];
        return F[target];
    }
}

變態跳臺階

一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。

解答:

這個題目寫出一些個數會發現也是一個斐波那契數列

public class Solution {
    public int JumpFloorII(int target) {
        int sum[] = new int[100];
        sum[0] = 0;
        sum[1] = 1;
        sum[2] = 2;
        sum[3] = 4;
        for(int i=4;i<=target;i++){
            for(int j=0;j<i;j++)
            {
                sum[i]=sum[i]+sum[j];
            }
            sum[i] = sum[i]+1;
        }
        return sum[target];
    }
}

矩形覆蓋

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?

解答:

這個題目是一個DP的題目,解答過程晚上加上去

public class Solution {
    public int RectCover(int target) {
        int F[] = new int[100];
        F[0] = 0;
        F[1] = 1;
        F[2] = 2;
        for(int i=3;i<=target;i++)
        {
            F[i] = F[i-1]+F[i-2];
        }
        return F[target];
    }
}

二進位制中1的個數

輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。

解答:

這個題目主要使用到了位運算

public class Solution {
    public int NumberOf1(int n) {
        int ans= 0;
        while(n!=0)
        {
            ans++;
            n = n&(n-1);
        }
        return ans;
    }
}

數值的整數次方

給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。

解答:

這個題目主要用到了庫函式

public class Solution {
    public double Power(double base, int exponent) {
        return Math.pow(base,exponent);
  }
}