示例 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;
}