LeetCode 第50題 Pow(x, n) [log(n)]

問題描述:

計算 pow(x, n),也就是計算 x 的 n次方。

算法思路:

首先來考慮 n 的二進制表示,比如,n 的二進制形式爲 ‘10001011’,那麼 x^n=x^(1+2+8+128)=x^1*x^2*x^8*x^128,也就是說 x^n 可以拆成幾個數的乘積。在此基礎上,可以通過遍歷 n 的每一個二進制比特位,如果第 i 個比特是 1,那麼我們就在結果上加上 x^(1 << i) 。這樣最大時間複雜度爲 log(d) ,d 爲 n 的二進制長度。

代碼如下:

class Solution(object):
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
        def pow(base, exp):
            result = 1.0
            if exp & 1 > 0:
                result *= base
            while exp > 0:
                base *= base
                exp = exp >> 1
                if exp & 1 > 0:
                    result *= base
            return result

        if n > 0:
            return pow(x, n)
        elif n < 0:
            return 1/pow(x, -n)
        else:
            return 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章