数值的整数次方
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路
pow()函数求解
import java.util.*;
public class Solution {
public double Power(double base, int exponent) {
double res = Math.pow(base,exponent);
return res;
}
}
传统公式求解
时间复杂度O(n)
import java.util.*;
public class Solution {
public double Power(double base, int exponent) {
double res = 1;
for(int i = 0; i < Math.abs(exponent); i++){
res *= base;
}
if(exponent < 0){
res = 1/res;
}
return res;
}
}
递归
- n为偶数,a^n =a^n/2* a^n/2;
- n为奇数,a^n =(a^(n-1) / 2)*(a^(n-1) / 2)*a
- 时间复杂度O(logn)
import java.util.*;
public class Solution {
public double Power(double base, int exponent) {
if(exponent==0 && base != 0)
return 1;
if(exponent==1)
return base;
if(base == 0 && exponent <= 0){
throw new RuntimeException();
}
if(base ==0 && exponent>0){
return 0;
}
int n = exponent;
if(exponent<0){
n = -exponent;
}
double result=Power(base,n>>1);
result*=result;
if((n&1)==1)
result*=base;
if(exponent<0)
result=1/result;
return result;
}
}