leetcode解題:遞歸&分治(下)

這篇博客講具體題目

50. Pow(x, n)

實現 pow(x, n) ,即計算 x 的 n 次冪函數。
示例:

輸入: 2.00000, 10
輸出: 1024.00000
===========================
輸入: 2.10000, 3
輸出: 9.26100
===========================
輸入: 2.00000, -2
輸出: 0.25000
解釋: 2-2 = 1/22 = 1/4 = 0.25

說明:
100.0<x<100.0{-100.0 < x < 100.0}
n 是 32 位有符號整數,其數值範圍是 [231,2311]{[−2^{31}, 2^{31} − 1] }

class Solution:
    def myPow(self, x: float, n: int) -> float:
        
        """
        遞歸
        n分爲奇偶數兩種情況
        
        """
        
        if not n:
            return 1
        if n < 0 :
            return 1/self.myPow(x, -n)
        if n % 2:
            # n爲奇數的情況
            return self.myPow(x, n-1) * x
        return self.myPow(x * x, n / 2)

執行用時 : 52 ms, 在Pow(x, n)的Python3提交中擊敗了80.77% 的用戶
內存消耗 : 13.3 MB, 在Pow(x, n)的Python3提交中擊敗了26.84% 的用戶

非遞歸的形式:

class Solution:
    def myPow(self, x: float, n: int) -> float:

        # 非遞歸(這裏用到了位運算,優點是速度快)
        if n < 0:
            x = 1 / x
            n = -n
        pow = 1
        while n:
            if n & 1:
                pow *= x
            x *= x
            n >>= 1
            # 把">>"左邊的運算數的各二進位全部右移若干位,>> 右邊的數字指定了移動的位數
        return pow

執行用時 : 56 ms, 在Pow(x, n)的Python3提交中擊敗了70.98% 的用戶
內存消耗 : 13.2 MB, 在Pow(x, n)的Python3提交中擊敗了61.54% 的用戶
python 位運算

169. 求衆數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章