1. 程式人生 > 實用技巧 >LeetCode 50. Pow(x, n)

LeetCode 50. Pow(x, n)

實現 pow(x, n) ,即計算 x 的 n 次冪函式。

示例 1:
輸入: 2.00000, 10
輸出: 1024.00000

示例 2:
輸入: 2.10000, 3
輸出: 9.26100

示例 3:
輸入: 2.00000, -2
輸出: 0.25000
解釋: 2-2 = 1/22 = 1/4 = 0.25

說明:
-100.0 < x < 100.0
n 是 32 位有符號整數,其數值範圍是 [−231, 231 − 1] 。

# 遞迴
class Solution:
    def myPow(self, x: float, n: int) -> float:
        def quickMul(N):
            if N == 0:
                return 1.0
            y = quickMul(N // 2)
            return y * y if N % 2 == 0 else y * y * x  
        return quickMul(n) if n >= 0 else 1.0 / quickMul(-n)
# 迭代
class Solution:
    def myPow(self, x: float, n: int) -> float:
        def quickMul(N):
            ans = 1.0
            # 貢獻的初始值為 x
            x_contribute = x
            # 在對 N 進行二進位制拆分的同時計算答案
            while N > 0:
                if N % 2 == 1:
                    # 如果 N 二進位制表示的最低位為 1,那麼需要計入貢獻
                    ans *= x_contribute
                # 將貢獻不斷地平方
                x_contribute *= x_contribute
                # 捨棄 N 二進位制表示的最低位,這樣我們每次只要判斷最低位即可
                N //= 2
            return ans
        
        return quickMul(n) if n >= 0 else 1.0 / quickMul(-n)