
leetcode题解50-Pow(x,n)
n为0:不管x是什么,结果都是1。 n为正偶数:结果为正数。 x为0:当n>0,结果为0。
发布日期:2025-04-05 06:01:02
浏览次数:8
分类:精选文章
本文共 1740 字,大约阅读时间需要 5 分钟。
要实现pow(x, n)函数,我们需要考虑很多特殊情况和优化点。
特殊情况处理
代码逻辑
public class Solution { public double myPow(double x, int n) { // 处理n为0的情况 if (n == 0) return 1.0; // 处理x为-1的情况 if (Math.Abs(x) == 1.0) { if ((x > 0) && (n % 2 == 0)) return 1.0; if (x < 0 && (n % 2 != 0)) return -1.0; return 1.0; } // 处理x为1的情况 if (Math.Abs(x) == 1.0) { return x == 1.0 ? 1.0 : -1.0; } // 处理微小的浮点数误差 if ((x > 1.0 && x < 2.0) || (x < -1.0 && x > -2.0)) { // 特殊处理接近于1的值 if ((n > 0 && x == 1.0) || (n < 0 && x == -1.0)) { return 1.0; } } // 处理n为正数的情况 if (n > 0) { double result = x; int m = n; // 逐步计算,避免数值过大导致溢出的问题 do { result *= x; // 检查结果是否趋近于0 if (result < 1.0 / 1024.0) return 0.0; } while (m-- > 0); return result; } else { // 处理n为负数的情况 int m = -n; do { try { result *= result; // 检查是否结果趋近于0 if (result < 1.0 / 1024.0) return 0.0; } catch (OverflowException) { // 检查结果是否会溢出 if (result > 1.7976931348623157e+308) return 0.0; } } while (m-- > 0); // 取倒数 return 1.0 / result; } }}
优化点
- 数字处理:当计算结果趋向于0时,提前终止循环。
- 避免溢出:使用双精度数并检查计算结果是否接近最大值。
- 特殊值处理:快速处理x为1和-1的情况,以及n为0的情况,确保代码高效运行。
- 减少循环次数:通过对数运算或者位处理,减少循环次数,提高性能。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月15日 06时07分24秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!