您當前的位置:首頁 > 歷史

Pow(x, n)

作者:由 白龍魚服 發表于 歷史時間:2021-04-15

原題指路

力扣

解題思路

Pow(x, n)

看到pow函式,上來就是一個快速冪。

快速冪遞迴式

 x^n=\left\{ \begin{array}{l} x^{n-1}\cdot x,&&if&n&is&odd\\ x^{\frac{n}{2}}\cdot x^{\frac{n}{2}},&&if&n&in&even&but¬&0\\ 1,&&if&n&is&0 \end{array} \right.

然後,就是將遞迴式改寫為非遞迴版本,透過對指數進行二進位制轉換,然後不斷右移即可模擬這個過程(因為其實本體是二分法啦)。 若指數為負,那麼就先計算$x^{-n}$,然後再取倒數即可。

時間複雜度:

O(\log{n})

空間複雜度:

O(1)

程式碼

class

Solution

def

myPow

self

x

float

n

int

->

float

‘’‘

快速冪

Args:

x: 底數

n: 指數(整數)

Returns:

x^n

’‘’

def

qpow

N

int

->

float

‘’‘

當指數為正整數時的快速冪

Args:

N: 指數

Returns:

x^N

’‘’

res

=

1。0

num

=

x

while

N

>

0

if

N

%

2

# 最後一位為1則代表需要乘

res

*=

num

num

*=

num

# 更新乘數

N

>>=

1

# 更新指數

return

res

return

qpow

n

if

n

>=

0

else

1。0

/

qpow

-

n

# 當n為負數時可以先計算x^(-n)然後再取倒數

標簽: float  指數  遞迴  複雜度  int