题意:实现求x的n次幂
解法一:简单的相乘,超时
public class Solution {
public double pow(double x, int n) {
double res = 1;
boolean flag = false;
if(n == 0) return 1;
if(n < 0){
flag = true;
n = -n;
}
for(int i=0; i<n; i++)
res *= x;
if(flag) res = -res;
return res;
}
解法二:因为解法一超时主要是重复计算,可以将重复计算消除,比如当n为奇数的时候,只需要计算pow(x, (n-1)/2);当n为偶数的时候,只需要计算pow(x, n/2)
——》这样时间复杂度就可以将为O(lgn)
public class Solution {
public double pow(double x, int n) {
double res = 1;
boolean flag = false;
if(n == 0) return 1;
if(n < 0){
flag = true;
n = -n;
}
if(n%2 == 0){
double t = pow(x, n/2);
res = t * t;
}
else {
double t = pow(x, (n-1)/2);
res = t * t * x;
}
if(flag) res = 1/res;
return res;
}
}