1. 程式人生 > >[劍指Offer] 16_數值的整數次方

[劍指Offer] 16_數值的整數次方

題目

實現函式double Power(double base, int exponent), 求base的exponent次方,不得使用庫函式。同時不需要考慮大數問題。


思路

  1. 看到乘方,自然想到二分加速的方法。但是這個題關注的不是速度,而是考慮問題的全面性。比如幾個邊界情況,base=0,exp <=0 的時候。
    1. 時間複雜度:O(logn)
    2. 空間複雜度: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為小數?
做題之前需要多想,特別是邊界情況,保證準確性。