剑指Offer(第二版)面试题16:数值的整数次方

来源:互联网 发布:淘宝手机助手安卓版 编辑:程序博客网 时间:2024/06/06 03:19



(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/73368916冷血之心的博客)


剑指Offer(第二版)面试题16:数值的整数次方


题目:请实现一个函数,功能类似与Math.power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题



思路:该题主要考察代码的完整性,即必须考虑底数为0和指数为负数的情况,力求写出完整的代码。
在方法2中我们使用了递归的思路,即从下到上依次计算。相求16次方,则先求8次方,先求4次方。。。

/** * 剑指Offer(第二版)面试题16:数值的整数次方 * 题目:请事先一个函数,功能类似与Math.power(double base, int exponent), * 求base的exponent次方。不得使用库函数,同时不需要考虑大数问题 * @author ywq */public class Main {public static void main(String[] args) {System.out.println(PowerEst(2, 4));}/** * 方法1:常规解法,时间复杂度为O(N) * @param base * @param exponent * @return */public static double Power(double base, int exponent) {      if(base==0)       return 0;      double result = 1.0;      for(int i = 1;i<=Math.abs(exponent);i++){      result *= base;      }      return exponent>0?result:1/result;}/** * 方法2:递归解法,时间复杂度为O(logN) * @param base * @param exponent * @return */public static double PowerEst(double base, int exponent) {   if(base==0)   return 0;   int n=Math.abs(exponent);       if(n==0)           return 1;       if(n==1)           return base;       double  result=PowerEst(base,n>>1);       result*=result;       if((n&1)==1)           result*=base;       if(exponent<0)           result=1/result;       return result;   }}


细节问题:

(1)方法2 中使用了右移运算符代替了除以2,效率高

(2)方法2 用位与运算代替了求余运算符(%)来判断一个数是奇数还是偶数



如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~

本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。





原创粉丝点击