剑指offer(十二)数值的整数次方
来源:互联网 发布:js是什么文件格式 编辑:程序博客网 时间:2024/06/03 14:47
题目
- 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
案例
- 2.5的3次方,3.6的5次方,2.8的-3次方等等
分析
- 第一想法就是return Math.pow(base, exponent);然后通过了,这也是一个方法,java内部封装好的工具类
- 但是题目显然不是为了让我们那么随便过去的,而是要达到锻炼的目的
- 一种就是直接循环,先将exponent取绝对值,然后一次次让base相乘,最后判断exponent的正负来决定是否取相反数
- 另一种就是递归调用,利用二进制来计算
解题代码:循环相乘
// 传统公式求解时间复杂度O(n)public class Solution { public double Power(double base, int exponent) { double result = 1; for(int i = 0; i < Math.abs(exponent); i++) { result *= base; } if(exponent < 0) { result = 1 / result; } return result; }}
- 解题代码:递归调用
// 递归:n为偶数,a^n=a^n/2*a^n/2;n为奇数,a^n=(a^(n-1)/2)*(a^(n-1/2))*a// 时间复杂度O(logn) public class Solution { public double Power(double base, int exponent) { // 取绝对值 int n = Math.abs(exponent); // 特殊情况直接返回 if(n == 0) return 1; if(n == 1) return base; // 递归调用,>>1的话,偶数相当于直接除以2,奇数相当于减一之后除以2 double result = Power(base, n >> 1); result *= result; // 如果是&1等于1的话,代表是奇数,则需要再乘一次 if((n & 1) == 1) result *= base; // 如果小于0,则需要取相反数 if(exponent < 0) result = 1 / result; return result; }}
- 总结
- 题目比较简单,前面两种都容易理解,递归需要仔细思考一下,还是利用到了二进制的性质来解答
阅读全文
1 0
- 剑指offer(十二)数值的整数次方
- 剑指Offer之数值的整数次方
- 剑指offer:数值的整数次方
- 【剑指offer】数值的整数次方
- [剑指offer]Q11:数值的整数次方
- 【剑指offer】数值的整数次方
- 剑指Offer之数值的整数次方
- 《剑指offer》数值的整数次方
- 剑指offer--数值的整数次方
- 剑指Offer之 - 数值的整数次方
- 剑指offer-11 数值的整数次方
- 剑指offer 11 - 数值的整数次方
- 剑指Offer-数值的整数次方
- 剑指offer 数值的整数次方
- 《剑指offer》数值的整数次方
- 剑指offer—数值的整数次方
- 剑指Offer-11-数值的整数次方
- 【剑指offer】之数值的整数次方
- SeaSar之框架搭建和入门案例-yellowcong
- EasyNVR H5无插件直播方案前端架构之:直播页面和视频列表页面切换的问题
- Vim工具常用的命令
- 做到这一点,你也可以成为优秀的程序员
- 佛祖保佑 永无BUG
- 剑指offer(十二)数值的整数次方
- plc数据采集初探
- 温故而知新--linux协议栈
- 设计模式之单例模式
- 多级联动,下拉列表取text及value值的两种方法(传统方法+JQuery方法)
- 仓库初始化
- git push首次提交报错denyCurrentBranch
- python中的静态方法和类方法
- 解决aptitude 安装软件时 package XXX is not configure yet