LeetCode - Pow(x, n)
来源:互联网 发布:c语言考试卷 编辑:程序博客网 时间:2024/06/03 17:58
https://leetcode.com/problems/powx-n/
这道题有两种解法,第一种是根据n的每一位来算的。
例如 n = 11时,n=2^3 + 2^1 + 2^0,即看n的每一位是否为1. 此时 res = x^8 * x^2 * x^1 . 即对应于n的每一位的值。
并且对于n的每一位来说,它对应的x^i是它前一位对应的x^j的平方。因为相邻两位的值总是2^t和2^(t-1),所以i = 2j 。
最后实现的代码如下:
public double pow(double x, int n) { if(n<0){ x = 1/x; } double res = 1.0; n = Math.abs(n); while(n>0){ if((n&1) !=0){ res *=x; //如果n的当前位是1的话,就把这个值乘到结果中 } x*=x; //求出当前位对应的x^i的值 n=n>>1; } return res; }
另一种解法是用递归实现的二分法:
public double pow(double x, int n) { if(n==0) return 1.0; if(n<0){ x = 1/x; } n = Math.abs(n); double half = pow(x, n/2); if(n%2==0) return half*half; else return half*half*x; }
LeetCode 在这道题上对边界条件的检查要求不高,关于边界检查,可以看这里:
http://blog.csdn.net/linhuanmars/article/details/20092829
0 0
- 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)
- 【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
- 【leetcode】Pow(x, n)
- 【Leetcode】Pow(x, n)
- LeetCode Pow(x, n)
- Leetcode: Pow(x, n)
- 如何使用Java、Servlet创建二维码
- [LeetCode]Min Stack
- 在Ubuntu上搭建SVN服务器
- JAVA_HOME之小配置,大问题
- Linux入门:VIM
- LeetCode - Pow(x, n)
- final、public、abstract可以修饰外部class
- Android Gif播放控件
- git 合并两个远程库
- C++学习笔记(一)
- 第四周项目三:用对象数组操作长方体类
- 17-java5阻塞队列的应用
- groovy 速学 - 05 - 方法,函数与闭包
- VMware 网络连接设置 ping ARM开发板