• 【剑指offer】12 数值的整数次方


    题目地址:数值的整数次方

    题目描述                                   

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
     
    保证base和exponent不同时为0。

    题目示例                                   

    输入:
    2,3
    返回值:
    8.00000

    解法分析                                   

    看到题目第一个想到的方法就是用Math.pow(base,exponent)或者base**exponent…但是做题肯定不能用现成的轮子,用最简单的就是用循环实现,见算法1。

    但是这种方法效率太低,时间复杂度为 O(N),我们可以考虑使用快速幂的办法解决问题。

    快速幂的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算,时间复杂度为 O(logN),效率高不少,见算法2。

    代码                                         

    算法1:

     1 function Power(base, exponent)
     2 {
     3     // write code here
     4     var n = 1;
     5     if(base == 0){
     6         return 0;
     7     }else if(exponent == 0){
     8         return 1;
     9     }else if(exponent > 0){
    10         while(exponent--){
    11             n *= base;
    12         }
    13         return n;
    14     }else if(exponent < 0){
    15         while(exponent++){
    16             n *= base;
    17         }
    18         return 1/n;
    19     }
    20 }

    算法2:

     1 function Power(base, exponent)
     2 {
     3     // write code here
     4     if(base == 0){
     5         return 0;
     6     }else if(exponent == 0){
     7         return 1;
     8     }else if(exponent < 0){
     9         base = 1 / base;
    10         exponent = -exponent;
    11     }
    12     var n = base;
    13     var res = 1;
    14     while(exponent){
    15         if(exponent & 1){
    16             res *= n;
    17         }
    18         n *= n;
    19         exponent >>= 1;
    20     }
    21     return res;
    22 }

    执行结果                                   

  • 相关阅读:
    10 查看创建表的语句:show create table emp;
    9 常用命令?
    8 如何查看表中的数据?
    7 查看表结构
    构建之法阅读笔记3
    每日汇报
    每周总结
    每日汇报
    每周总结
    每日总结
  • 原文地址:https://www.cnblogs.com/sunlinan/p/14272200.html
Copyright © 2020-2023  润新知