【解题思路】
按照常规方式去计算,有几个特殊的测试样例,特殊处理。
class Solution {
public double myPow(double x, int n) {
if(n == 0) return 1;
if(x == 1.0) return 1;
if(x == -1)
{
if(n % 2 == 0 || n == -2147483648) return 1;
else return -1;
}
if(n == -2147483648) return 0;
int m = n;
double ans = x;
if(n < 0)
{
n = 0-n;
}
for(int i = 1; i < n; i++)
{
ans *= x;
}
if(m < 0)
{
ans = 1/ans;
}
return ans;
}
}
官方题解更简洁:
class Solution {
public double myPow(double x, int n) {
long N = n;
return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
}
public double quickMul(double x, long N) {
if (N == 0) {
return 1.0;
}
double y = quickMul(x, N / 2);
return N % 2 == 0 ? y * y : y * y * x;
}
}