题目翻译:
实现pow(x, n).
递归分治
如果n是偶数,pow(x, n)=pow(x, n/2)*pow(x, n/2).
如果n是奇数,pow(x, n)=pow(x, n/2)*pow(x, n/2)*x.
同时,针对n大于0和n小于0做分类讨论,时间复杂度为O(logn),空间复杂度为O(1)。。
class Solution {
public:
double myPow(double x, int n) {
if(x==0)
return 0;
if(n==0)
return 1.0;
if(n==1)
return x;
if(n < 0)
return 1/getPow(x,-n);
return getPow(x,n);
}
double getPow(double x, int n)
{
double halfpow=myPow(x,abs(n/2));
if(n&0x0001)
return halfpow*halfpow*x;
return halfpow*halfpow;
}
};
注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50371678
原作者博客:http://blog.csdn.net/ebowtang