当前位置:实例文章 » 其他实例» [文章]【Leetcode】50. Pow(x, n)

【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)]( />* [递归和迭代](

其他信息

其他资源

Top