day67(1.26)——leetcode面试经典150

50. Pow(x, n)

50. Pow(x, n)

"幂为奇数" ⇨ "二进制最低位为 1" ⇨ "当前这个 2ᵏ 项要包含在结果中"

题目:

题解:

java 复制代码
class Solution {
    public double myPow(double x, int n) {
        if(x == 0.0f) {
            return 0.0d;
        }
        //用快速幂进行计算
        // 算法流程:
        // 当 x=0.0 时:直接返回 0.0 ,以避免后续 1 除以 0 操作报错。分析: 数字 0 的正数次幂恒为 0 ; 0 的 0 次幂和负数次幂没有意义,因此直接返回 0.0 即可。
        // 初始化 res=1 。
        // 当 n<0 时:把问题转化至 n≥0 的范围内,即执行 x=1/x ,n=−n 。
        // 循环计算:当 n=0 时跳出。
        // 当 n&1=1 时:将当前 x 乘入 res (即 res∗=x )。
        // 执行 x=x 
        // 2
        // (即 x∗=x )。
        // 执行 n 右移一位(即 n>>=1)。
        // 返回 res 。

        //为了防止整数溢出,所以必须直接赋值给m,再进行-
        long m = n;
        double res = 1.0;
        if(n<0) {
            x=1.0/x;
            m=-m;
        }
        while(m>0) {
            //如果幂是奇数
            if((m&1)==1) {
                res*=x;
            }
            x*=x;
            m>>=1;
        }
        return res;
    }
}
相关推荐
phltxy1 小时前
C语言操作符详解
java·c语言·算法
aqiu1111111 小时前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
辰烨chenye2 小时前
LeetCode Hot 100 题解 · 哈希篇
算法·leetcode·哈希算法
罗西的思考3 小时前
DreamZero 与 DreamDojo:世界模型与策略的分层协同综合分析与对比
人工智能·算法·机器学习
玖玥拾3 小时前
LeetCode 219 存在重复元素 II
算法·leetcode·哈希算法·散列表
ocean21033 小时前
2025-2026年AI部署与MLOps大厂面试高频问题
人工智能·面试·大模型推理·ai部署
知无不研4 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
a187927218315 小时前
【算法】动态规划第四篇:背包收官——min 哨兵、计数世界与组合排列分水岭
算法·leetcode·动态规划·dp·01背包·算法讲解·决策合并
2601_962297485 小时前
在python3中、下列输出变量a的正确写法是_2020超星大数据Python免费答案
数据结构·python·算法·编程·字符串操作