剑指offer16---数值的整数次方

这篇博客探讨了两种解决指数计算的方法。思路一是通过位运算优化,当n为负数时转换为正数并求倒数,然后利用二进制特性进行快速幂运算。思路二是使用递归思想,考虑n的正负、奇偶性,分别处理n=0、n为负数和n为奇偶数的情况。这两种方法都有效地提高了计算效率。

题目:

思路一:借用leetcode上大佬的解释

class Solution:
    def myPow(self, x: float, n: int) -> float:
        #采用位运算的方法
        if n<0:
            n=-n
            x=(1/x)
        # 同时关注x=0的情况
        result=1
        
        # n仍然代表相应的整数
        while n:
            # 取n对应的二进制,index=0位置上的数(因为进行与按位运算的相应位也只有“1”一个数)
            if n & 1:
                # 对应指数位置上为1就乘上x
                result*=x
            # 右移动一位,x就自身平方一次
            n>>=1
            x*=x
        return result

思路2:递归的思想

  1. 如果n = 0 return 1;
  2. 如果n是负数,return 1 / digui( x , -n )
  3. n=奇数,return x * digui( x的n-1次方 );
  4. n=偶数,return digui( x*x , (n//2) ).
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值