剑指offer系列-面试题-16 - 数值的整数次方 (python)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章