Leetcode:50. Pow(x, n)
Description
Implement pow(x, n).
思路
- 一年前的代码4ms,现在12ms,不得不感叹大佬们的成长速度有点可怕。。
- 提供一个大佬没有递归的思路
代码
- 递归
class Solution {
public:
double myPow(double x, int n) {
if(n == 0) return 1.0;
if(n < 0){
if(n == INT_MIN)
return (1.0 / (myPow(x, INT_MAX) * x));
else
return (1.0 / myPow(x, -n));
}
double half = myPow(x, n >> 1);
if(n % 2 == 1){
return half * half * x;
}
else return half * half;
}
};
- 大佬的Non-recursive C++ log(n) solution,有点小bug,已改如下:
class Solution {
public:
double myPow(double x, int n) {
if(n == 0) return 1.0;
double ans = 1;
if(n < 0){
x = 1.0 / x;
if(n == INT_MIN){
ans *= x;
n = INT_MAX;
}
else
n = -n;
}
while(n){
if(n & 1)
ans *= x;
x *= x;
n >>= 1;
}
return ans;
}
};