50. Pow(x, n)
题目链接
快速幂
- 当n为偶数时,xn = (x * x) n/2 ;当n为奇数时,xn = (x * x) n/2 * x
- 通过循环迭代,直至n为0
- 注意以下两点:
- 题目中n可能为负数,需要先取绝对值运算,最后结果再取倒数
- 对于Java中的Math.abs(int a)方法,如果a为Integer.MIN_VALUE,取绝对值就会超出int的范围,因此会保持不变;所以我们需要转成long类型进行运算
class Solution {
public double myPow(double x, int n) {
double ans = binaryPow(x, Math.abs((long)n));
if(n < 0) ans = 1.0 / ans;
return ans;
}
private double binaryPow(double x, long n){
double ans = 1;
while(n > 0){
if((n & 1) == 1) ans = ans * x;
x = x * x;
n >>= 1;
}
return ans;
}
}