【附可运行代码】剑指 Offer 16. 数值的整数次方
立志用最少的代码做最高效的表达
实现 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. 数值的整数次方相关推荐
- 【LeetCode】剑指 Offer 16. 数值的整数次方
[LeetCode]剑指 Offer 16. 数值的整数次方 文章目录 [LeetCode]剑指 Offer 16. 数值的整数次方 package offer;public class Soluti ...
- 【LeetCode笔记】剑指 Offer 16. 数值的整数次方(Java、分治)
文章目录 题目描述 思路 && 代码 二刷 题目描述 很棒的题目!便于分治思想的理解! 思路 && 代码 分情况是大头- 递归结束的情况: x0x^0x0 = 1 x1 ...
- 剑指offer——16.数值的整数次方
题目: 实现求base的exponent次方 知识点: 判断奇数还是偶数,a&1==1: 某数除以二,a >>= 1; a>0? res=1:res=2,当满足条件时,选前者 ...
- 【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 ...
- 剑指 Offer 16. 数值的整数次方
思路:快速幂模板,主要要注意负数的范围,乘以负一的时候会溢出,所以开一下longlong class Solution { public:double myPow(double x, int n) { ...
- Leetcode50.Pow(x, n)剑指 Offer 16. 数值的整数次方--递归快速幂
class Solution {public:double myPow(double x, int n) {if(n==0) return 1;//考虑到负数右移永远是负数,if(n==-1) ret ...
- 剑指Offer #12 数值的整数次方(快速幂)
题目来源:牛客网-剑指Offer专题 题目地址:数值的整数次方 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和 ...
- 《剑指Offer》 数值的整数次方
题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路: 直接调用pow函数 代码: class Solution { pub ...
- [剑指Offer]:数值的整数次方(循环解答,快速幂---递归、循环)
文章目录 题目描述 解答思路 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 示例: ...
最新文章
- const reference const
- 高级SQL优化(二) ——《12年资深DBA教你Oracle开发与优化——性能优化部分》
- java 方法泛型_Java基础学习,什么是泛型概念,使用泛型有哪些好处?
- mysql平滑关闭_MySQL平滑删除数据的小技巧
- 【week2】 构建之法 读后感及问题
- hadoop中两种上传文件方式
- pandas 字段操作
- SAS基础练习(一)
- 程序员到项目经理:从内而外的提升(比较全面的介绍)
- python for 循环中使用星号(*),实现分组展开列表
- pip更新pip,升级 pip3怎么做?
- ant design table列表 合并列单元格
- ~《概率论》~贝叶斯公式
- C_Primer第12章 存储类型、链接和内存管理
- NOIP2017提高组复赛总结
- 【STM32】按键抖动及消除
- linux strip作用,linux gcc strip命令简介
- 基于java的高校实验室排课系统
- 【历史上的今天】12 月 3 日:世界上第一条短信;Fortran 语言之父诞生;百度贴吧上线
- 百度搜索研究,详解一个页面的索引价值!