LeetCode 50. Pow(x, n)
2020-05-11 16:06:30来源:博客园 阅读 ()
LeetCode 50. Pow(x, n)
我的LeetCode:https://leetcode-cn.com/u/ituring/
我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii
LeetCode 50. Pow(x, n)
题目
实现?pow(x, n)?,即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例?2:
输入: 2.10000, 3
输出: 9.26100
示例?3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
- -100.0 <?x?< 100.0
- n?是 32 位有符号整数,其数值范围是?[?231,?231?? 1] 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/powx-n
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
思路1-对数运算与幂运算的对立逻辑
思路解析:对n进行以2为底的对数运算,对x进行以x为底的幂运算,递归进行,注意最后要进行符号处理:
一个例子:求2.0的10次方
- 10/2得5余数0,对应\((2*2)*(2*2)*(2*2)*(2*2)*(2*2)=4*4*4*4*4\)
- 5/2得2余数1,对应\((4*4)*(4*4)*4=16*16*4\),这里4需要额外保存最后再乘进去;
- 2/2得1余数0,对应\(16*16=256\),上一步的4取走一个,每次只计算成对的因子;
- 1/2得0余数1,此时只剩256,需要保留256与之前保留的乘起来,即这一步为\(256*4=1024\),计算完毕;
tips:
- 这个例子中间只保留了一次不成对的情况值,对于其他的例子,可能中间要保留好几次,但最终都是将这些值连乘起来才得到最终结果;
- 对n的对数压缩映射到对x的幂积放大上,效率很快
- 因为计算n的时候是忽略了正负号的,所以若n为负数,最终值需要取倒数;
算法复杂度:
- 时间复杂度: $ {\color{Magenta}{\Omicron\left(logn\right)}} $
- 空间复杂度: $ {\color{Magenta}{\Omicron\left(1\right)}} $
算法源码示例
package leetcode;
/**
* @author ZhouJie
* @date 2020年2月2日 下午10:23:55
* @Description: 50. Pow(x, n)
*
*/
public class LeetCode_0050 {
}
class Solution_0050 {
/**
* @author: ZhouJie
* @date: 2020年2月4日 下午11:29:49
* @param: @param x
* @param: @param n
* @param: @return
* @return: double
* @Description: 1-对n进行对数运算,对x进行幂计算;
*
*/
public double myPow(double x, int n) {
boolean f = n > 0;
double y = 1.0;
while (n != 0) {
// 对n取对数的同时对x进行幂计算,若n不为2的倍数则补乘一次x;
if (n % 2 != 0) {
y *= x;
}
x *= x;
n /= 2;
}
return f ? y : 1 / y;
}
}
原文链接:https://www.cnblogs.com/izhoujie/p/12873090.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- LeetCode 287. 寻找重复数 2020-05-31
- LeetCode 5. 最长回文子串 2020-05-22
- LeetCode 21. 合并两个有序链表 2020-05-22
- LeetCode 面试题55 - I. 二叉树的深度 2020-05-22
- LeetCode 104. 二叉树的最大深度 2020-05-22
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash