描述:
给定一个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
if base == 0 and exponent < 0:
return None
if base == 0 or base == 1:
return base
if exponent == 0:
return 1
n = False
if exponent < 0:
n = True
exponent = -exponent
s = bin(exponent)[2:][::-1]
res = 1
cur = base
for i in s:
if i == '1':
res *= cur
cur = cur * cur
return res if not n else 1 / res
结果:
运行时间:32ms
占用内存:5860k