劍指OFFER 數值的整數次方

2021-09-28 16:32:21 字數 1689 閱讀 6743

時間複雜度:o(n)

空間複雜度:o(1)

class

solution

:def

power

(self, base, exponent)

:# 只討論簡單的幾種情況,其他如0^0、0^-1等情況未討論

if base==0:

return

0if exponent==0:

return

1 ans =

1for i in

range

(abs

(exponent)):

ans *= base

return ans if exponent>

0else

1/ans

class solution 

};

當n為偶數,an =an/2 · an/2

當n為奇數,an = a(n-1)/2 · a(n-1)/2 · a

時間複雜度:o(log(n))

空間複雜度:遞迴呼叫的空間

class

solution

:def

power

(self, base, exponent)

:if base==0:

return

0if exponent==0:

return

1 e =

abs(exponent)

ans = self.power(base, e>>1)

ans *= ans

if e&1:

ans *= base

return ans if exponent>

0else

1/ans

class solution 

};

將指數拆成n/2的累加,如:

3 ^ 999

= 3 ^ (512 + 256 + 128 + 64 + 32 + 4 + 2 + 1)

相當於將999轉成二進位制:1111100111,每位代表要乘的倍數。

即,僅計算到3^512,途中若該位是1,則累乘當前值。

時間複雜度:o(n/2)

空間複雜度:o(1)

class

solution

:def

power

(self, base, exponent)

:if base==0:

return

0if exponent==0:

return

1

ans =

1 cur = base

e =abs(exponent)

while e:

if e &1:

ans *= cur

cur *= base

e = e >>

1return ans if exponent>

0else

1/ans

class solution 

return exponent>

0? ans :

1/ans;}}

;

劍指offer 數值的整數次方

1 題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。2 思路 需要考慮到的情況 1 指數為負數的時候,可以先對指數求絕對值,算出次方之後的結果再取倒數。2 當底數是0,指數是負數的時候,可以將無效變數設定為true,並返回0。3...

劍指offer 數值的整數次方

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。將指數大於0,小於0,等於0 底數不為0 的情況分開。其實指數為0的情況不必單獨拎出來 不進入if直接返回result為1.0 真正需要考慮的是,底數為0而指數為負的情況,數學上沒有意義。書...

劍指offer 數值的整數次方

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。1.最直觀的方法,遞迴求解a b a a b 1 當然也可以用迴圈實現。要注意特殊情況,指數為0時乘方結果都是1 指數為負數時的計算,可以先轉化為正數再求倒數,但是底數為0時不能求導。2.效...