LeetCode 50. Pow(x, n)

LeetCode.jpg

Pow(x, n)

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

輸入: 2.00000, 10
輸出: 1024.00000

示例 2:

輸入: 2.10000, 3
輸出: 9.26100

示例 3:

輸入: 2.00000, -2
輸出: 0.25000
解釋: 2(-2) = 1/2(2) = 1/4 = 0.25

說明:

-100.0 < x < 100.0
n 是 32 位有符號整數(shù),其數(shù)值范圍是 [?2(31), 2(31) ? 1] 。

Python3實現(xiàn)

非遞歸移位

每次對半計算,先每次算n/2 n/2的值,由兩值可得n
注意每次對半計算時 n為偶數(shù)還是計算

# @author:leacoder
# @des:  非遞歸  移位法 Pow(x, n)

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: # n 為奇數(shù)
                pow *= x
            
            x *=x #偶數(shù)   x = x*x  n=n>>1 (右移1 n減半)   即為 x(n) = (x*x)(n/2)
            n >>=1 #移位 左移1 n減半
            
        return pow

遞歸

每次對半計算,先每次算n/2 n/2的值,由兩值可得n
注意每次對半計算時 n為偶數(shù)還是計算

# @author:leacoder
# @des:  遞歸  Pow(x, n)

class Solution:
    def myPow(self, x: float, n: int) -> float:
        if n == 0: #遞歸終止條件
            return 1
        if n<0: #n<0的情況
            return 1/self.myPow(x,-n)
        if n%2 == 0: # n為偶數(shù)
            return self.myPow(x*x,n/2) # x(n/2) * x(n/2) = (x * x)(n/2)
        else:#n為奇數(shù)
            return x*self.myPow(x,n-1) # x * x((n-1)/2) * x((n-1)/2) = x * (x*x)((n-1)/2) = x* x(n-1)
            # return x*self.myPow(x*x,(n-1)/2)

GitHub鏈接:
https://github.com/lichangke/LeetCode
知乎個人首頁:
https://www.zhihu.com/people/lichangke/
個人Blog:
https://lichangke.github.io/
歡迎大家來一起交流學習

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容