立志用最少的代码做最高效的表达


实现 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


解法一:函数

class Solution {public double myPow(double x, int n) {return Math.pow(2.1, -3);}
}

解法二:快速幂

快速幂原理:

当n为奇数时:a(n−1)/2∗a(n−1)/2∗aa^{(n-1)/2}*a^{(n-1)/2}*aa(n−1)/2∗a(n−1)/2∗a

当n为偶数时:an=an/2∗an/2a^{n}=a^{n/2}*a^{n/2}an=an/2∗an/2

若看不懂,手推一遍5115^{11}511试一下即可。

注意:n要强转为long型,否则当取到int极限值时,会报错

class Solution {public double myPow(double x, int n) {if(x == 0) return 0;double res = 1;     // 新底数long b = n;         // 如果直接使用n,会溢出if(b < 0) { x = 1/x; b = -b; }; // 负数的情况while(b > 0) {if((b&1) == 1) res *= x;x *= x;b >>= 1;}return res;}
}

可运行代码

public class 剑指Offer16_数值的整数次方 {// 函数解法static class Solution1 {public double myPow(double x, int n) {return Math.pow(2.1, -3);}public static void main(String[] args) {Solution1 solution1 = new Solution1();System.out.println(solution1.myPow(2,3));}}// 快速幂(手推一遍例子就懂了)static class Solution2 {public double myPow(double x, int n) {if(x == 0) return 0;double res = 1;     // 新底数long b = n;         // 如果直接使用n,会溢出if(b < 0) { x = 1/x; b = -b; }; // 负数的情况while(b > 0) {if((b&1) == 1) res *= x;x *= x;b >>= 1;}return res;}public static void main(String[] args) {Solution2 solution2 = new Solution2();System.out.println(solution2.myPow(2,3));}}}

【附可运行代码】剑指 Offer 16. 数值的整数次方相关推荐

  1. 【LeetCode】剑指 Offer 16. 数值的整数次方

    [LeetCode]剑指 Offer 16. 数值的整数次方 文章目录 [LeetCode]剑指 Offer 16. 数值的整数次方 package offer;public class Soluti ...

  2. 【LeetCode笔记】剑指 Offer 16. 数值的整数次方(Java、分治)

    文章目录 题目描述 思路 && 代码 二刷 题目描述 很棒的题目!便于分治思想的理解! 思路 && 代码 分情况是大头- 递归结束的情况: x0x^0x0 = 1 x1 ...

  3. 剑指offer——16.数值的整数次方

    题目: 实现求base的exponent次方 知识点: 判断奇数还是偶数,a&1==1: 某数除以二,a >>= 1; a>0? res=1:res=2,当满足条件时,选前者 ...

  4. 【leetcode】剑指 Offer 16. 数值的整数次方(shu-zhi-de-zheng-shu-ci-fang-lcof)(快速幂)[中等]

    链接 https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/ 耗时 解题:6 min 题解:6 min 题意 实现 po ...

  5. 剑指 Offer 16. 数值的整数次方

    思路:快速幂模板,主要要注意负数的范围,乘以负一的时候会溢出,所以开一下longlong class Solution { public:double myPow(double x, int n) { ...

  6. Leetcode50.Pow(x, n)剑指 Offer 16. 数值的整数次方--递归快速幂

    class Solution {public:double myPow(double x, int n) {if(n==0) return 1;//考虑到负数右移永远是负数,if(n==-1) ret ...

  7. 剑指Offer #12 数值的整数次方(快速幂)

    题目来源:牛客网-剑指Offer专题 题目地址:数值的整数次方 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和 ...

  8. 《剑指Offer》 数值的整数次方

    题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路: 直接调用pow函数 代码: class Solution { pub ...

  9. [剑指Offer]:数值的整数次方(循环解答,快速幂---递归、循环)

    文章目录 题目描述 解答思路 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 示例: ...

最新文章

  1. const reference const
  2. 高级SQL优化(二) ——《12年资深DBA教你Oracle开发与优化——性能优化部分》
  3. java 方法泛型_Java基础学习,什么是泛型概念,使用泛型有哪些好处?
  4. mysql平滑关闭_MySQL平滑删除数据的小技巧
  5. 【week2】 构建之法 读后感及问题
  6. hadoop中两种上传文件方式
  7. pandas 字段操作
  8. SAS基础练习(一)
  9. 程序员到项目经理:从内而外的提升(比较全面的介绍)
  10. python for 循环中使用星号(*),实现分组展开列表
  11. pip更新pip,升级 pip3怎么做?
  12. ant design table列表 合并列单元格
  13. ~《概率论》~贝叶斯公式
  14. C_Primer第12章 存储类型、链接和内存管理
  15. NOIP2017提高组复赛总结
  16. 【STM32】按键抖动及消除
  17. linux strip作用,linux gcc strip命令简介
  18. 基于java的高校实验室排课系统
  19. 【历史上的今天】12 月 3 日:世界上第一条短信;Fortran 语言之父诞生;百度贴吧上线
  20. 百度搜索研究,详解一个页面的索引价值!

热门文章

  1. 32位机器下面各类型的取值范围(sizeof值)
  2. Android Databinding学习
  3. Go GC 20 问
  4. OS- -文件系统(四)
  5. 【突破移动端性能极限】
  6. 江湖急诏令:腾讯数据库王者挑战赛赏金万两募英豪!
  7. 论亚马逊QLDB与腾讯TDSQL对历史数据的管理和计算
  8. TDSQL 全时态数据库系统-理念与愿景
  9. 性能测试工具curl-loader二---测试分析
  10. Linux 下安装和配置git