博客
关于我
剑指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/

你可能感兴趣的文章
Nginx简单介绍
查看>>
Nginx访问控制_登陆权限的控制(http_auth_basic_module)
查看>>
nginx负载均衡和反相代理的配置
查看>>
nginx负载均衡器处理session共享的几种方法(转)
查看>>
nginx负载均衡的5种策略
查看>>
nginx负载均衡的5种策略(转载)
查看>>
nginx负载均衡的五种算法
查看>>
Nginx负载均衡(upstream)
查看>>
nginx转发端口时与导致websocket不生效
查看>>
Nginx运维与实战(二)-Https配置
查看>>
Nginx部署_mysql代理_redis代理_phoenix代理_xxljob代理_websocket代理_Nacos代理_内网穿透代理_多系统转发---记录021_大数据工作笔记0181
查看>>
Nginx配置Https证书
查看>>
Nginx配置ssl实现https
查看>>
Nginx配置TCP代理指南
查看>>
Nginx配置——不记录指定文件类型日志
查看>>
nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
查看>>
Nginx配置代理解决本地html进行ajax请求接口跨域问题
查看>>
nginx配置全解
查看>>
Nginx配置参数中文说明
查看>>
Nginx配置后台网关映射路径
查看>>