Implement pow(x, n).
1 最先想到的就是递归 不断的递归 然后LTE了。。
2 那二分法
public class Solution {
public double pow(double x, int n) {
if(n==0)
return 1;
if(n==1)
return x;
if(n<0)
return 1/pow(x,-n);
return x*pow(x,n/2)*pow(x,n-n/2);
}
}
还是LTE了 %>_<%
3 网上看到的思路
原文描述如下:
Consider the binary representation of n. For example, if it is "10001011", then x^n = x^(1+2+8+128) = x^1 * x^2 * x^8 * x^128. Thus, we don't want to loop n times to calculate x^n. To speed up, we loop through each bit, if the i-th bit is 1, then we add x^(1 << i) to the result. Since (1 << i) is a power of 2, x^(1<<(i+1)) = square(x^(1<<i)). The loop executes for a maximum of log(n) times.
public class Solution {
public double pow(double x, int n) {
if(n==0)
return 1.0;
if(n==1)
return x;
if(x==1.0||x==-1.0)
return n%2==0?x*x:x;
if(n<0)
return 1.0/pow(x,-n);
double ans=1.0;
while(n>0){
if((n&1)==1)//这里一开始一直出错 if(n&1==1) 注意啊!==的优先级比&高
ans*=x;
x*=x;
n>>=1;
}
return ans;
}
}