描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:
方法一:return base ** exponent
方法二:二进制,例如exponent=5,可以分解为1 * (2 ** 2) + 0 * (2 **1) + 1 * (2 ** 0),这样就可以将问题简化为在二进制当前位不为0的时候累乘base,这样相当于每次将base进行平方,复杂度降为log(n),这个思路需要注意如果是负次方,按照正次方处理,最后取倒数。
代码:
class Solution:
def Power(self, base, exponent):
# write code here
is_negative = False
if exponent < 0:
is_negative = True
exponent = abs(exponent)
if base == 0:
return 0
elif exponent == 0:
return 1
if exponent % 2 == 0:
res = 1
else:
res = base
exponent = exponent // 2
count = 1
while exponent > 0:
m = exponent % 2
exponent = exponent // 2
if m == 1:
cur = base
for i in range(count):
cur *= cur
res *= cur
count += 1
return 1 / res if is_negative else res
结果:
运行时间:32ms
占用内存:5860k