LeetCode 求数值的整数次方

该文章介绍了如何在不使用库函数的情况下实现计算x的n次幂的函数,重点讲解了快速幂算法,以避免递归或循环导致的栈溢出问题。通过将n转化为二进制,每次平方并检查二进制位,可以降低时间复杂度。代码示例展示了如何利用快速幂方法处理正负指数的情况。
摘要由CSDN通过智能技术生成

题目

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^{n})。不得使用库函数,同时不需要考虑大数问题。

题目分析

1、实现一个数的n次方,不调用库函数。

2、如果使用平常递归或者循环,当n的值过大时,会导致内存栈溢出。

3、使用快速幂,解决栈溢出问题的同时能将时间复杂度降低到O(\log n)

知识点分析

快速幂:

1、更新x:每次让x=x^{2}

2、更新n:①使用 n&1 判断n二进制最后一位是否为1

                   ②每次将n>>1

class Solution{
    public double myPow(double x, int n){
        //如果x为0,则直接返回结果
        if(x == 0) return 0;
        long b == n;
        //用于存储最终结果
        double res = 1.0;
        //如果n为负数,将其转换为正数,方便后续计算
        if(b < 0){
            x = 1/x;
            b = -b;
        }
        //快速幂实现
        while(b > 0){
            //如果b为奇数,则将结果存入res
            if((b & 1) == 1) res *= x;
            //将x平方赋值给x
            x *= x;
            //右移b
            b >>= 1;
        }
        //返回结果
        return res;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值