本文算法使用python3实现
1 题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
时间限制:1s;空间限制:32768K
2 思路描述:
方法一:对exponent大于0的情况:计算 $ underbrace{base imes base imes ldots imes base}_{
m exponent 个base} $ ;对于exponent小于0的情况:对exponent取绝对值,按照之前的方法求得结果后取倒数。(复杂度为 $ O(n) $ )
方法二:同样是分为exponent大于0或小于0的情况,小于0时求倒数。但是对于大于0时,计算方法如下:$$ a^n= egin{cases} a^{frac{n}{2}} imes a^{frac{n}{2}} , & ext {if n 为偶数} a^{frac{n}{2}} imes a^{frac{n}{2}} imes a, & ext{if n 为奇数} end{cases} $$
其中 $ a = base, n =exponent $
对于该部分可以使用递归进行实现。(复杂度为 $ O(log_2n) $ )
注意:当base为0时无意义,但是在python中由于精度问题,需对base是否为0进行判断
3 程序代码:
(1)方法一
class Solution:
def Power_1(self, base, exponent):
# 普通算法
# 对0进行界定
if base > -1e-7 and base < 1e-7:
return 0
if exponent == 1:
return base
if exponent == 0:
return 1
exp = abs(exponent)
res = 1.0
for i in range(exp):
res *= base
if exponent > 0:
return res
else:
return 1/res
(2)方法二:
class Solution:
def Power_2(self, base, exponent):
# 高效算法
if base > -1e-7 and base < 1e-7:
return 0
if exponent == 1:
return base
if exponent == 0:
return 1
exp = abs(exponent)
ans = self.Power_2(base, exp >> 1)
ans = ans * ans * 1.0
if exp & 1 == 1 :
# 如果幂为奇数
ans = ans * base
if exponent < 0:
return 1/ans
return ans