Java實現 pow(x, n) ,即計算 x 的 n 次冪函數。

示例 1:

輸入: 2.00000, 10
輸出: 1024.00000
示例 2:

輸入: 2.10000, 3
輸出: 9.26100
示例 3:

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/powx-n
 

public double myPow(double x, int n) {
        //核心思想主要還是折半,把原本比較大的這個冪變成原來的一半,這樣結果就可以通過這個一半的冪相乘來組成了
        if (n == 0) {//任何數的0次冪都是1
            return 1;
        }
        //把這個問題轉換成更小的問題進行解決
        double half = myPow(x,n/2);
        //如果是個偶數的話,就正好是一半冪的乘積
        if (n%2 == 0) {
            return half*half;
        }
        //如果是奇數並且n>0的話
        if(n > 0) {
            return half*half*x;
        }
        return half*half/x;
    }

經典的把一個相對較大的問題使用折半的方法轉換成較小的問題,代碼註釋中也寫明瞭解釋。

還有另一種相同的思想,只是用循環來實現的,如下:

public double myPow(double x, int n) {
        double res = 1.0;
        int i = n;
        while (i != 0) {
            //如果是奇數,那麼還要多乘一個x
            if (i%2 != 0) {
                res *= x;
            }
            //偶數直接自我平方
            x *= x;
            //折半
            i /= 2;
        }
        //判斷n的正負來返回正確答案
        return n < 0 ? 1/res : res;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章