【Pow(x,n)】
题目:
Implement pow(x, n).
代码:
class Solution { public: double myPow(double x, int n) { double ret = Solution::positivePow(fabs(x), abs(n)); if ( n>0 ) { if ( x<0 && n&1 ) { return -1 * ret; } } else { if ( x<0 && abs(n)&1 ) { return -1 / ret; } return 1 / ret; } return ret; } static double positivePow(double x, int n) { if ( n==0 ) return 1; if ( n==1 ) return x; double v1 = Solution::positivePow(x, n/2); double v2 = n&1 ? x : 1; return v1 * v1 * v2; } };
tips:
1. 考察binary search的思想,把计算复杂度由O(n)降低为O(logn)
2. 有个细节就是判断奇数偶数的时候,用bit判断,效率能略高一些。其实自己对计算机内部怎么执行加减乘除的原理应该是学过,但是忘记了,回头复习下。
===========================================
第二次过这道题,参考了之前的思路,分类讨论细一些,一次AC了。
class Solution { public: double myPow(double x, int n) { double ret = 0; ret = Solution::pow(fabs(x), abs(n)); if ( x>0 ) { if ( n>=0 ) { return ret; } else { return 1 / ret; } } else { if ( n & 1 ) { if ( n>0 ) { return -ret; } else { return -1 / ret; } } else { if ( n>0 ) { return ret; } else { return 1 / ret; } } } } static double pow(double x, int n) { if (n==0) return 1; if (n==1) return x; double val = Solution::pow(x, n/2); double remain = n & 1 ? x : 1; return val * val * remain; } };
=====================================
第三次过,代码简洁了一些。主要是把x为0单独处理一下。
class Solution { public: double myPow(double x, int n) { double ret = 0; if ( fabs(x-0)<1e-9 ) return 0.0; ret = Solution::pow(fabs(x), abs(n)); if (x>0) { if ( n<0 ) { ret = 1.0 / ret; } } else { if ( n & 1 ) { ret = -ret; } if ( n<0 ) { ret = 1.0 / ret; } } return ret; } static double pow(double x, int n) { if (n==0) return 1; if (n==1) return x; double val = Solution::pow(x, n/2); double remain = n & 1 ? x : 1; return val * val * remain; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?