【Leetcode】50. Pow(x, n)
发布人:shili8
发布时间:2025-03-12 07:32
阅读次数:0
**LeetCode50. Pow(x, n)**
=====================================**题目描述**
------------给定两个数字 `x` 和 `n`,返回 `x` 的 `n` 次方。
**示例**
-----
* 输入:`x =2`, `n =3`
输出: `8`
* 输入:`x =2.1`, `n =3`
输出: `9.261`
**解决方案**
------------### 方法一:递归法
class Solution: def myPow(self, x: float, n: int) -> float: # 递归函数,计算x的n次方 def recursive_pow(x, n): if n ==0: return1.0 elif n < 0: return1 / recursive_pow(x, -n) else: half_pow = recursive_pow(x, n //2) result = half_pow * half_pow # 如果n是奇数,需要乘以x if n %2 !=0: result *= x return result return recursive_pow(x, n)
### 方法二:迭代法
class Solution: def myPow(self, x: float, n: int) -> float: # 迭代函数,计算x的n次方 if n < 0: x =1 / x n = -n result =1.0 while n >0: # 如果n是奇数,需要乘以x if n %2 !=0: result *= x # 将x的平方作为结果的一部分 x *= x # 将n除以2 n //=2 return result
### 方法三:使用二分法
class Solution: def myPow(self, x: float, n: int) -> float: # 如果x是0,直接返回0 if x ==0: return0.0 # 如果n是负数,转换为正数 if n < 0: x =1 / x n = -n # 使用二分法计算x的n次方 low, high =0, n while low <= high: mid = (low + high) //2 # 如果mid是奇数,需要乘以x if mid %2 !=0: result = x * self.myPow(x * x, mid -1) else: result = self.myPow(x * x, mid) # 如果结果小于n,需要继续计算 if result < n: low = mid +1 # 如果结果大于或等于n,需要减少计算范围 elif result > n: high = mid -1 else: return result return result
**总结**
-----
本题目要求计算 `x` 的 `n` 次方。我们提供了三种不同的解决方案:递归法、迭代法和二分法。每种方法都有其优点和缺点,选择哪种方法取决于具体的场景和需求。
**注意**
----
* 递归法可能会导致栈溢出,如果 `n` 很大。
* 迭代法需要多次乘以 `x`,如果 `x` 很小,可能会导致精度丧失。
* 二分法可以避免上述问题,但需要额外的计算成本。
**参考**
----
* [LeetCode50. Pow(x, n)]( />* [递归和迭代](

