题目
实现 pow(x, n) ,即计算 x
的 n
次幂函数(即,x
n
^{n}
n)。
解题思路
对于n<0的情况,先取x = 1 / x。
快速幂,维护一个乘数和结果,幂指数转换成二进制,对于当前二进制位为1的情况表示结果需要乘以乘数,为0的情况则不需要操作,随着二进制位数的升高,乘数每次乘以自身。
例如 a 5 {^5} 5 ,可以转换成 (1 * a 4 ^{4} 4) * (0 * a 2 ^{2} 2) * (1 * a 0 ^{0} 0)。
代码
class Solution {
public double myPow(double x, int n) {
x = n < 0 ? 1 / x : x;
double ans = 1.0;
while (n != 0) {
if (n % 2 != 0) {
ans *= x;
}
x *= x;
n /= 2;
}
return ans;
}
}