ok,用我们最擅长的递归来实现以下。
其中空间复杂度为O(logn),时间负责度为O(logn),每次将 x^n 拆成 x^(n/2) * x^(n/2)来做。
对负数分母很大时进行INTMAX上限处理。
class Solution {
public:
double myPow(double x, int n){
return myPow(x,n,0);
}
double myPow(double x, long n, int negative) {
if(n==0){
return 1;
}
if(n==1){
return x;
}
if(n<0){
return 1/myPow(x,-n,1);
}
if(n%2==0){
double half = myPow(x,n/2,0);
if(negative && half>~(1<<31)){
return half;
}
return half * half;
}else{
double half = myPow(x,n/2,0);
if(negative && half>~(1<<31)){
return half;
}
return half * half * x;
}
}
};