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

你可能感兴趣的文章
Nacos配置中心集群原理及源码分析
查看>>
nacos配置自动刷新源码解析
查看>>
Nacos集群搭建
查看>>
nacos集群搭建
查看>>
Navicat for MySQL 查看BLOB字段内容
查看>>
Neo4j电影关系图Cypher
查看>>
Neo4j的安装与使用
查看>>
Neo4j(2):环境搭建
查看>>
Neo私链
查看>>
nessus快速安装使用指南(非常详细)零基础入门到精通,收藏这一篇就够了
查看>>
Nessus漏洞扫描教程之配置Nessus
查看>>
Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
查看>>
NetApp凭借领先的混合云数据与服务把握数字化转型机遇
查看>>
NetBeans IDE8.0需要JDK1.7及以上版本
查看>>
netcat的端口转发功能的实现
查看>>
netfilter应用场景
查看>>
netlink2.6.32内核实现源码
查看>>
Netpas:不一样的SD-WAN+ 保障网络通讯品质
查看>>
NetScaler的常用配置
查看>>
netsh advfirewall
查看>>