Implement pow(x, n).
这道题最慢时间复杂度也是O(n),快一些的是O(logn),主要是将n考虑为二进制的形式,某一位是1的话,就乘上相应的次方数即可。代码如下:
public class Solution {
public double myPow(double x, int n) {
if(x == 1.0){
return x;
}
double sum = 1;
double temp = x;
boolean flag = false;
if(n < 0){
flag = true;
n = -n;
}
while(n != 0){
if(n % 2 == 1){
sum = sum * temp;
}
temp = temp * temp;
n = n >>> 1;
}
if(flag == false)
return sum;
else
return 1/sum;
}
}
public class Solution {
public double pow(double x, int n) {
if(n == 0)
return 1;
if(n<0){
n = -n;
x = 1/x;
}
return (n%2 == 0) ? pow(x*x, n/2) : x*pow(x*x, n/2);
}
}