Pow(x, n)---lintcode
来源:互联网 发布:mysql 合计函数 编辑:程序博客网 时间:2024/06/10 04:53
Description
Implement pow(x, n).
Example
Pow(2.1, 3) = 9.261
Pow(0, 1) = 0
Pow(1, 0) = 1
这个题目很简单。for循环。挨个乘。就行。于是
public double myPow(double x, int n) { // Write your code here double result=1; for(int i=0;i<Math.abs(n);i++){ result*=x; } if(n<0){ result=(double)1/result; } return result; }
但是测试时间有点长啊!
于是弱弱的我 百度其他方法,找到两个方法,都是分治法。一个是递归 一个是非递归,用了二进制。
递归 二分法来加速计算x^n=x^(n/2)* x^(n/2)即x^10=x^5*x^5,这种计算N次幂只要相乘O(logN)次,但是会有重复计算
public double myPow(double x, int n) { if(n==0) return 1; if(n==1)return x; if(n==-1) return (double)1/x; int temp=n; n=Math.abs(n); double result=1; if(n%2==1){ result=myPow(x,n/2)*myPow(x,n/2)*x; }else{ result=myPow(x,n/2)*myPow(x,n/2); } if(temp<0){ result=(double)1/result; } return result;}
这个测试时间好一点
非递归(利用二进制,这个方法有点难啊):
参考网址:http://blog.csdn.net/morewindows/article/details/7174143
我就直接搬他的解释吧。
考虑x^23,可以先从x ->x^2 -> x^4 -> x^8 -> x^16 取result1 = x^16,然后23-16=7。
我们只要计算x^7再与result1相乘就可以得到x^23。对于x^7也可以采用这种方法
取result2 = x^4,然后7-4=3,只要计算x^3再与result2相乘就可以得到x^7。由此可以将x^23写成x^16 * x^4* x^2 * x,即23=16+4+2+1,而23 = 10111(二进制),所以只要将n化为二进制并由低位到高位依次判断如果第i位为1,则result *=x^(2^i)。
还可以作进一步的优化,如像48=110000(二进制)这种低位有很多0的数,可以先过滤掉低位的0再进行计算,这样也会提高一些效率
public double myPow(double x, int n) { int temp=n; n=Math.abs(n); if(n==0) return 1; else{ while((n & 1)==0){ n>>=1; x*=x; } } double result=x; n >>=1; while(n!=0){ x*=x; if((n & 1)!=0){ result*=x; } n >>=1; } if(temp<0){ return (double)1/result; } return result;}
测试:
阅读全文
0 0
- *[Lintcode]Pow(x, n)
- Pow(x, n)---lintcode
- Pow(x, n) / Super Pow
- LeetCode: Pow(x, n)
- LeetCode Pow(x,n)
- [Leetcode] Pow(x, n)
- LeetCode: Pow(x, n)
- Leetcode: Pow(x,n)
- [LeetCode] Pow(x, n)
- [Leetcode] Pow(x,n)
- Pow(x, n)
- 【leetcode】Pow(x, n)
- Pow(x, n)
- 求 pow(x, n)
- [LeetCode]Pow(x, n)
- Pow(x,n)
- Pow(x, n)
- Pow(x, n)
- 缓式评估、写时复制及引用计数的关系
- 虚拟机VMware显示“内部错误”的解决方法
- 蒙特卡洛--抛洒点求圆周率
- 开源|基于区块链的智能合约快速上手
- HashMap源码解析(基于JDK1.7)
- Pow(x, n)---lintcode
- 查看javaScrip代码定义
- VC++6.0总报错的问题 : Error spawning cl.exe
- Python读取文本绘制动态速度曲线(多图同步显示)
- [题解] P2015 二叉苹果树(树形DP)
- js事件处理程序 Uncaught TypeError: Cannot read property 'addEventListener' of null
- 汇哲科技-8月23日国盟CISA每日一题
- 结构体、共用体与枚举
- 餐饮行业的运营