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——名企面试官精讲典型编程题