剑指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 }

 

posted @ 2019-08-22 09:01  chyblogs  阅读(157)  评论(0)    收藏  举报