题意如下:
其实就是个快速幂,遍历方法的优化。当n为偶数时,xn=xn/2·xn/2。当n为奇数时,xn=xn/2·xn/2·n。(n/2为向下取整)
此题需要注意的是当n为负时可以将x变成1/n。还有当n=-231时n=-n会爆int。
c++代码如下:
class Solution {
public:
double myPow(double x, int n) {
if(x==0)
return 0;
long long a=n;
if(a<0)
{
x=1/x;
a=-a;
}
double ans=1.0;
while(a>0)
{
if(a&1)
ans*=x;
x=x*x;
a>>=1;
}
return ans;
}
};
时间复杂度:O(logN)。