No.50 Pow
来源:互联网 发布:朝鲜拥核 知乎 编辑:程序博客网 时间:2024/05/22 09:03
1、思路一:
根据n的取值分三种情况,n>0、n==0和n<0,用循环依次累计乘法。
class Solution {public: double myPow(double x, int n) { double mul =1; if(n==0){ return 1; } else if(n>0){ for(int i=0;i<n;i++) mul *=x; } else{ for(int i=0;i>n;i--){ mul *= x; } mul = 1/mul; } return mul; }};
提交结果为Time Limit Exceeded,当x=0.00001,n=2147483647时超时。
2、思路二:
分治思想: x^n = x^(n/2) * x^(n/2) * x^(n%2),将x的n次方降幂为n/2,讨论n的奇偶性,如果n为奇数,则多乘一个v。
class Solution {public: double myPow(double x, int n) { if(n==0) return 1; else if(n<0) return 1.0/myPow(x,-n); else { double v=myPow(x,n/2); if(n%2==0) return v*v; else return v*v*x; } }};
存在问题:x=1.00000,n=-2147483648时,显示Runtime Error。改为如下写法就可以顺利通过:
class Solution {public: double myPow(double x, int n) { if(n<0) return 1.0/power(x,-n); else return power(x,n); }private: double power(double x,int n){ if(n==0) return 1; double v=power(x,n/2); if(n%2==0) return v*v; else return v*v*x; }};
0 0
- No.50 Pow
- Leetcode NO.50 Pow(x, n)
- Leetcode No.50: Pow(x, n)
- LeetCode No.50 Pow(x, n)
- pow(double a,int b) [No. 41]
- 'pow' : no matching overloaded function found \n"
- LeetCode(50)Pow
- 50、Pow(x, n)
- 50 Pow(x, n)
- 50 Pow(x, n)
- 50Pow(x, n)
- [50]Pow(x, n)
- 50、Pow(x, n)
- 50 - Pow(x, n)
- 50Pow(x, n)
- 50 Pow(x, n)
- leetcode-50-pow
- 50-pow(x,n)
- Leetcode刷题(2)
- STM32F0开发笔记4: STM32CubeF0固件架构
- Axure7.0安装
- 舞伴问题
- lib和dll文件的区别和联系
- No.50 Pow
- hdu 1241 Oil Deposits 搜索水题,等价于求一个图的连通分量的数目
- Apache服务器简介
- vitualenv中的python package覆盖问题
- vmware 后台运行ubuntu
- leetcode 481. Magical String python
- C/C++ 笔试面试(2)——二分查找
- CCF送货 欧拉路的判断+Fleury算法输出欧拉路的字典序最小的路径
- (精)数据库分库分表