版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HappyRocking/article/details/84829382
实现函数 pow(x,n)
,返回
。
备注:
1、-100.0 < x < 100.0
2、n是一个32位的整数,范围为
示例:
Example 1:
Input: 2.00000, 10
Output: 1024.00000
Example 2:
Input: 2.10000, 3
Output: 9.26100
Example 3:
Input: 2.00000, -2
Output: 0.25000
思路
1、暴力法
根据乘方的定义, 表示 n 个 x 相乘,那么循环 n 次的乘法即可。
算法复杂度为 O(n)。
2、分治法
根据公式: ,可以将问题转化为求 的子问题,使用分治法可以解决,分治法的结束条件为
注意:
- 可能是小数,因此要提前判断 n 的奇偶性。
- n 可能是负数,因此要提前将 n 转为整数,并使用公式
算法复杂度为 O(logn)。
python实现
def myPow(x, n):
"""
:type x: float
:type n: int
:rtype: float
分治法。
"""
def fun(x, n):
'''
递归,x^n = (x^(n/2))^2
'''
# 递归结束条件
if n == 1:
return x
# 递归
half = fun(x, n // 2)
if n % 2 == 1: # 如果是奇数,则还需要再乘以一个x
return half * half * x
else:
return half * half
if n == 0:
return 1
elif n > 0:
return fun(x, n)
else:
return 1/fun(x, -n)
if '__main__' == __name__:
x, n = 2.10000, 3
print(myPow(x, n))