[LeetCode](面試題16)數值的整數次方

題目

實現函數double Power(double base, int exponent),求base的exponent次方。不得使用庫函數,同時不需要考慮大數問題。

示例 1:

輸入: 2.00000, 10
輸出: 1024.00000

示例 2:

輸入: 2.10000, 3
輸出: 9.26100

示例 3:

輸入: 2.00000, -2
輸出: 0.25000
解釋: 2^(-2) = 1/2^2 = 1/4 = 0.25

說明:

  • -100.0 < x < 100.0
  • n 是 32 位有符號整數,其數值範圍是 [231−2^{31}, 2312^{31} − 1] 。

解題思路

詳細思路請參考 50. Pow(x, n)

注:Java 中 int 變量 n∈[−2147483648,2147483647] ,因此當 n = -2147483648 時,執行 n = -n 會因越界而賦值出錯。解決方法是先將 n 存入 long 變量 N ,後面用 N 操作即可。

代碼

class Solution {
    public double myPow(double x, int n) {
        long N = n;
        if(N>=0){
            return powHelper(x, N);
        }else{
            return 1.0/powHelper(x, -N);
        }
    }
    private double powHelper(double x, long n){
        if(n==0){
            return 1.0;
        }
        if(n==1){
            return x;
        }
        double res = powHelper(x, n/2);
        if(n%2==0){
            res *= res;
        }else{
            res *= res * x;
        }
        return res;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章