1. 題目
實現函數double Power(double base, int exponent),求base的exponent次方。不得使用庫函數,同時不需要考慮“大數問題“。
2. 解題思路
2.1 普通思路
直接循環做乘法。
2.2 活用數學知識
當exponent爲偶數時:x ** n = (x ** 2)** (n//2)
當exponent爲奇數時:x ** n = x * (x ** (n-1)),此時的n-1爲偶數,用上面的方法
3. 代碼實現
3.1 普通思路
class Solution:
def myPow(self, x, n):
result = 1
flag = 0 # 表示n爲正整數
if n < 0:
flag = 1 # 表示n爲負整數
n = -1 * n
for _ in range(n):
result *= x
if flag:
return 1 / result
return result
3.2 活用數學知識
class Solution:
def myPow(self, x, n):
if n < 0:
return 1 / self.myPow(x, -1 * n)
if n == 0:
return 1
if n == 1:
return x
if n & 1: # exponent爲奇數
return x * self.myPow(x, n-1)
return self.myPow(x * x, n>>1)
4. 總結
做算法,數學知識還是挺重要的。可是吧,數學這東西不用就忘了,所以還是要多刷題,保持住才行。
5. 參考文獻
[1] 劍指offer叢書
[2] 劍指Offer——名企面試官精講典型編程題