千问 LeetCode 50. Pow(x, n) Python3实现

发布时间:2026/11/11 13:34:49
千问    LeetCode 50. Pow(x, n) Python3实现 LeetCode 50. Pow(x, n) 的核心思路是快速幂算法二分求幂。如果直接循环乘 n 次时间复杂度是 O(n)在 n 很大时会超时。快速幂的核心思想是分治如果 n 是偶数x^n (x{n/2})2如果 n 是奇数x^n x cdot (x{(n-1)/2})2这样每次递归或迭代都能将指数减半时间复杂度降为 O(log n)。下面为你提供两种 Python3 的实现方式解法一递归实现最直观体现分治思想class Solution:def myPow(self, x: float, n: int) - float:# 1. 处理负指数的情况if n 0:return 1.0 / self.myPow(x, -n)# 2. 递归终止条件 if n 0: return 1.0 # 3. 分治先计算 x^(n//2) half self.myPow(x, n // 2) # 4. 合并结果根据 n 的奇偶性决定是否需要多乘一个 x if n % 2 0: return half * half else: return half * half * x解法二迭代实现最优避免递归栈溢出利用位运算来检查 n 的最低位是 0 还是 1从而在循环中完成快速幂。class Solution:def myPow(self, x: float, n: int) - float:# 1. 处理负指数if n 0:x 1.0 / xn -nresult 1.0 current_product x # 记录当前的 x^(2^i) # 2. 循环直到 n 变为 0 while n 0: # 如果 n 的最低位是 1说明需要乘上当前的 current_product if n 1: result * current_product # 将 x 平方对应指数减半 current_product * current_product # n 右移一位相当于 n // 2 n 1 return result 核心要点解析负指数处理x^{-n} frac{1}{x^n}。注意 Python 中 -n 不会像 C/Java 那样在 n -2^{31} 时发生整数溢出所以处理起来非常安全。分治降维无论是递归还是迭代核心都是把 O(n) 的乘法次数降到了 O(log n)。例如计算 x^{10}只需要计算 x^2 rightarrow x^4 rightarrow x^8再组合即可。位运算的妙用在迭代法中n 1 等价于 n % 2n 1 等价于 n // 2但位运算在底层执行效率更高。复杂度分析时间复杂度O(log n)循环或递归的次数等于 n 的二进制位数。空间复杂度递归法为 O(log n)系统调用栈迭代法为 O(1)。如果你刚做完这道题强烈建议去体验一下 LeetCode 372. 超级次方它结合了快速幂和模运算是对这道题思想的绝佳进阶

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询