Leetcode50 Pow(x, n)
2015-08-09 15:41
495 查看
Pow(x, n)
Implement pow(x, n).Solution1
最简单的方法当然就是按照幂运算的规则一个一个去乘方了。如下:public class Solution { public double myPow(double x, int n) { if(x>-0.000001&&x<0.000001) return 0; if(n==0) return 1; boolean flag = n>0?true:false; n = (n>0?n:-1*n); double res = 1; while(n-->0) res *= x; return flag?res:1/res; } }
Solution2
解法一可行,但是OJ时报超时错误。时间复杂度还可以做得更好一些。public class Solution { public double myPow(double x, int n) { if(x>-0.000001&&x<0.000001) return 0; if(n==0) return 1; boolean flag = n>0?true:false; n = (n>0?n:-1*n); double t = myPow(x,n/2); if((n&1)==0) t *= t; else t = t*t*x; return flag?t:1/t; } }
这样的时间复杂度为O(logN).
Solution3
另外观察到负数在求模的过程中的特点:-5/2=-2; -4/2=-2; -3/2=-1; 可以进一步将解法二的代码简化如下:public class Solution { public double myPow(double x, int n) { if(n==0) return 1; if(x==0) return 0; double t = myPow(x,n/2); if((n&1)==0) return t*t;//必定是正数且为偶数 else return n<0?(1/x*t*t):(x*t*t);//注意不是1/(x*t*t) } }
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解
- LeetCode [Day 6] ZigZag Conversion 题解