class Solution {
public double myPow(double x, int n) {
double res = 1;
if (n == 0) {
return res;
}
long N = n;
if (N < 0) {
x = 1 / x;
N = -N;
}
while (N > 0) {
if ((N & 1) == 1) {// 最后一位是1
res *= x;
}
x *= x;
N >>= 1;// 右移一位
}
return res;
}
}
class Solution {
public:
double myPow(double x, int n) {
double result { 1.0 };
long power { n }; // 避免溢出
if (n < 0) {
x = 1/x;
power = ~power + 1;
}
while (power > 0) {
if (power & 1) {
result *= x;
}
power >>= 1;
x *= x;
}
return result;
}
};
共以下 9 个回答
看的答案
//位运算中,n的m次方,其实也有模板
快速幂递归
迭代
1、测试用例301/304,(n=-2147483648报错)
2、快速幂
快速幂
快速幂
时间复杂度O(log N),空间复杂度O(1)