時間複雜度: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.效...