[劍指Offer] 16_數值的整數次方
阿新 • • 發佈:2019-01-13
題目
實現函式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為小數?
做題之前需要多想,特別是邊界情況,保證準確性。