这道题,自己一开始就暴力解法,发现这个测试用例不过,当然也是我意料之中的。。
难度medium肯定不可能暴力解答了嘛,但是我确实想不出来其他办法了,😂 就瞅了一眼题解
使用迭代
的解法,
让i初始化为abs(n),然后看i是否是2的倍数,不是的话就让 res 乘以x。然后x自乘一下。(因为i不是2的倍数就肯定会有多余的一个乘法,x自乘就跟上了i每次循环减少一半的步伐)
i 每次循环缩小一半,直到为0停止循环。最后看n的正负,如果为负,返回其倒数。
class Solution {
public:
double myPow(double x, int n) {
if(n == 0) return 1.0;
int times = abs(n);
double result = 1.0;
for(int i = times; i != 0; i /= 2){
if(i % 2 != 0)
result *= x;
x *= x;
}
if( n < 0 ) return 1/result;
else return result;
}
};