博客
关于我
leetcode题解50-Pow(x,n)
阅读量:791 次
发布时间:2023-01-31

本文共 1740 字,大约阅读时间需要 5 分钟。

要实现pow(x, n)函数,我们需要考虑很多特殊情况和优化点。

特殊情况处理

  • n为0:不管x是什么,结果都是1。
  • n为正偶数:结果为正数。
  • x为0:当n>0,结果为0。
  • 代码逻辑

    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的情况,确保代码高效运行。
    • 减少循环次数:通过对数运算或者位处理,减少循环次数,提高性能。

    转载地址:http://pegyk.baihongyu.com/

    你可能感兴趣的文章
    el-select下拉框修改背景色
    查看>>
    ElasticSearch - 索引库和文档相关命令操作
    查看>>
    elasticsearch 7.7.0 单节点配置x-pack
    查看>>
    Elasticsearch 之(16)_filter执行原理深度剖析(bitset机制与caching机制)
    查看>>
    Elasticsearch7.3.1启动指定JDK11
    查看>>
    Elasticsearch下载安装
    查看>>
    Elasticsearch入门教程(Elasticsearch7,linux)
    查看>>
    ElasticSearch设置字段的keyword属性
    查看>>
    elasticsearch配置文件里的一些坑 [Failed to load settings from [elasticsearch.yml]]
    查看>>
    Elasticsearch面试题
    查看>>
    element ui 时间日期选择器 el-date-picker 报错 Prop being mutated “placement“
    查看>>
    element 如何使用自定义icon图标
    查看>>
    elTable火狐浏览器换行
    查看>>
    15个Python数据处理技巧(非常详细)零基础入门到精通,收藏这一篇就够了
    查看>>
    2024年全国程序员平均薪资排名:同样是程序员,为什么差这么多?零基础到精通,收藏这篇就够了
    查看>>
    10个程序员可以接私活的平台
    查看>>
    10个运维拿来就用的 Shell 脚本,用了才知道有多爽,零基础入门到精通,收藏这一篇就够了
    查看>>
    10款最佳免费WiFi黑客工具(附传送门)零基础入门到精通,收藏这一篇就够了
    查看>>
    15个备受欢迎的嵌入式GUI库,从零基础到精通,收藏这篇就够了!
    查看>>
    15个程序员常逛的宝藏网站!!从零基础到精通,收藏这篇就够了!
    查看>>