快速幂
注意代码
double y = myPow(x, n / 2);
return y * y;
而非
return myPow(x,n/2)
后者会使时间复杂度从O(logN)增至O(N)
时间复杂度:O(logN)
C++代码
class Solution {
public:
double myPow(double x, int n) {
if (!n)
return 1;
if (x == 1)
return 1;
else if (x == 0)
return 0;
else if (x == -1)
if (n % 2)
return -1;
else
return 1;
else if (n == 0)
return 1.0;
else if (n > 0)
{
if (n == 1)
{
return x;
}
else if (!(n % 2))
{
double y = myPow(x, n / 2);
return y * y;
}
else
{
double y = myPow(x, (n - 1) / 2);
return y * y * x;
}
}
else
{
if (n == INT_MIN)
return 1.0 / (myPow(x, -(n + 1))*x);
return 1.0 / myPow(x, -n);
}
}
};