题目描述:
Implement pow(x, n).
直接n个x相乘肯定是TLE的。我们知道x^(m+n)=x^m * x^n,沿用Divide Two Integers的方法通过左移不断缩小n,O(logn)的复杂度。
需要注意的点:
1、n为INT_MAX时会溢出导致死循环。
2、n为负数时。
代码如下:
class Solution {
public:
double pow(double x, int n) {
double ret(1);
bool flag(false);
if (n<0)
flag = true;
n = abs(n);
while (n > 0){
double curr(x);
int m(1);
while (m <= n){
if (m > 1)
curr *= curr;
if (m > INT_MAX >> 1)
break;
m <<= 1;
}
n -= m >> 1;
ret *= curr;
}
return flag ? 1 / ret : ret;
}
};