剑指offer_数值的整数次方
题目描述
给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。
方法一:直接调包
1 public class Solution { 2 public double Power(double base, int exponent) { 3 return Math.pow(base,exponent); 4 } 5 }
方法二:普通循环乘法
1 public class Solution { 2 public double Power(double base, int exponent) { 3 double res=1; 4 int count = Math.abs(exponent); 5 for(int i=0;i<count;i++) 6 res*=base; 7 if(exponent<0) res=1.0/res; 8 return res; 9 } 10 }
方法三:

注意公式中是整除
所以可以利用递归了
因为 (x*x)n/2 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。
1 public double Power(double base, int exponent) { 2 if (exponent == 0) 3 return 1; 4 if (exponent == 1) 5 return base; 6 boolean isNegative = false; 7 if (exponent < 0) { 8 exponent = -exponent; 9 isNegative = true; 10 } 11 double pow = Power(base * base, exponent / 2); 12 if (exponent % 2 != 0) 13 pow = pow * base; 14 return isNegative ? 1 / pow : pow; 15 }

浙公网安备 33010602011771号