题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:很自然的会想到用迭代。但是也可以用二分法来解决问题,时间复杂度为O(logn)个人觉得,这个题目最难的是有很多边界问题需要考虑。
public class Solution {
public double Power(double base, int exponent) {
if(base==0 && exponent>0) return 0;
if(base==0 && exponent<0) return -1;
//判断指数的正负
if(exponent > 0){
return getMutiply(base,exponent);
}else if(exponent < 0){
exponent = -exponent;
getMutiply(base,exponent);
return 1/getMutiply(base,exponent);
}else{ return 1;}
}
//用二分法解决问题
public static double getMutiply(double base,int exponent){
if(exponent == 0) return 1;
if(exponent == 1) return base;
//判断指数的奇偶性
if(isEven(exponent)){
return getMutiply(base*base,exponent/2);
}else {
return getMutiply(base*base,exponent/2)*base;
}
}
public static boolean isEven(int n){
return n%2 == 0;
}
}