博客
关于我
剑指offer-面试题16:数值的整数次方
阅读量:256 次
发布时间:2019-03-01

本文共 1472 字,大约阅读时间需要 4 分钟。

题目描述

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即xn)。不得使用库函数,同时不需要考虑大数问题。

示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
提示:
-100.0 < x < 100.0
-231 <= n <= 231-1
-104 <= xn <= 104

方法一(快幂法)

1.解题思路

  • 计算x的n次幂,可以考虑把指数n不断除2,底数x相应变为自己的平方,乘到结果里,如果在这个过程中,指数n为奇数,则在结果里再乘以一个底数x,同时n自减1,当指数n为0时,整个过程就结束了,最终的结果,其值就是x的n次幂。
  • 如果n小于0,则对应地,设一个变量b为n,然后通过b进行操作,同时x变为1/x,b变为-b。
  • 因为java中32为整型范围为(-231 ,231-1),当n为-231 时,取反操作会越界,所以,可以设b的类型为long。

2.代码实现

class Solution {       public double myPow(double x, int n) {           if(n==0) return 1;        long b=n;        if(n<0){               x=1.0/x;            b=-b;        }        double res=1.0;        while(b!=0){               if(b%2==1){                   res*=x;                b-=1;            }            x*=x;            b/=2;        }        return res;    }}

3.复杂度分析

  • 时间复杂度:数字n在循环过程中不断二分,直到变为0,所以时间杂度是O(log2n)
  • 空间复杂度:不需要额外的空间开销,所以空间复杂度为O(1)

方法二(递归)

1.解题思路

  1. 递归终止条件:当n为0,1或-1时,可以直接返回对应的值。
  2. 从上一层递归获取什么:由于每一层都需要对指数n除2,所以需要获取上一层除2之后的那一半,如果不能被2整除,还需要获取上一层除2之后的余数。
  3. 每一层返回什么:返回上一层所得一半的平方再乘以余数,比如27=23*23*21

2.代码实现

class Solution {       public double myPow(double x, int n) {           if(n==0) return 1;        if(n==1) return x;        if(n==-1) return 1.0/x;        double half=myPow(x,n/2);        double mod=myPow(x,n%2);        return half*half*mod;    }}

3.复杂度分析

  • 时间复杂度:数字n在循环过程中不断二分,直到变为0,所以时间杂度是O(log2n)
  • 空间复杂度:递归栈的深度为2分的次数,所以空间复杂度为O(log2n)

剑指offer全集入口:

转载地址:http://ptca.baihongyu.com/

你可能感兴趣的文章
MySQL的常见命令
查看>>
mysql的引擎以及优缺点_MySQL有哪些存储引擎,各自的优缺点,应用场景-阿里云开发者社区...
查看>>
MySQL的操作:
查看>>
mysql的数据类型有哪些?
查看>>
mysql的语法规范
查看>>
MySql的连接查询
查看>>
mysql的配置文件参数
查看>>
MySQL的错误:No query specified
查看>>
mysql监控工具-PMM,让你更上一层楼(上)
查看>>
mysql监控工具-PMM,让你更上一层楼(下)
查看>>
MySQL相关命令
查看>>
mysql社工库搭建教程_社工库的搭建思路与代码实现
查看>>
mysql笔记 (早前的,很乱)
查看>>
MySQL笔记:InnoDB的锁机制
查看>>
mysql第一天~mysql基础【主要是DDL、DML、DQL语句,以及重点掌握存存引擎、查询(模糊查询)】
查看>>
mysql第二天~mysql基础【查询排序、分页查询、多表查询、数据备份与恢复等】
查看>>
MySQL简单查询
查看>>
MySQL管理利器 MySQL Utilities 安装
查看>>
mysql类型转换函数convert与cast的用法
查看>>
mysql系列一
查看>>