题目
实现函数double Power(double base, int exponent), 求base的exponent次方,不得使用库函数。同时不需要考虑大数问题。
思路
- 看到乘方,自然想到二分加速的方法。但是这个题关注的不是速度,而是考虑问题的全面性。比如几个边界情况,base=0,exp <=0 的时候。
- 时间复杂度:O(logn)
- 空间复杂度:O(1)
代码
思路1:时间复杂度:O(logn),空间复杂度:O(1)
def power(base, exponent):
"""
:param base: a
:param exponent: b
:return: a^b
"""
flag = 1
if base == 0:
return 0
if exponent < 0 :
flag = 0
exponent = - exponent
def binary_pow(base, exponent):
if exponent == 1:
return base
if exponent == 0:
return 1
res = binary_pow(base, exponent >> 1)
res *= res
if exponent & 1:
res *= base
return res
res = binary_pow(base, exponent)
return res if flag else 1 / res
思考
如果exp为小数?
做题之前需要多想,特别是边界情况,保证准确性。