此题需要注意的是n取正数,负数,零的情况,且其的奇偶也需要考虑,
采用常规算法超时,采用递归求解子问题,将一个数的n次幂转换成该数n/2次幂的乘积,因为是对n进行二分,复杂度为O(lgn)
class Solution {
public:
double pow(double x, int n) {
if(n==0)
return 1;
if(n==1)
return x;
double temp = pow(x, abs(n/2));
if(n>0)
{
if(n&1)
return temp*temp*x;
else
return temp*temp;
}
else
{
if(n&1)
return 1.0/(temp*temp*x);
else
return 1.0/(temp*temp);
}
}
};