版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010712012/article/details/84984038
50.Pow(x, n)
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释:
=
= 1/4 = 0.25
说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。
思路:这题其实本质是递归,递归和分治算法其实本质也是同一个东西。这里我们本来可以暴力递归,那么时间复杂度就是O(N),但是还有更好的,就是分治,把很多个x拆成很多组x分别相乘。但是这里要注意的是偶数和奇数有点不同。偶数的话
,result=y * y;奇数时
,result = y * y * x.
这时候复杂度为O(logN)
代码:
class Solution:
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
if not n:
return 1
if n < 0:
return 1/self.myPow(x,-n)
if n%2:
return x * self.myPow(x,n-1)
return self.myPow(x*x,n/2)
或者是
if n < 0:
x = 1/x
n = -n
pow = 1
while n:
if n & 1:
pow *= x
x *= x
n >>= 1 #右移位能减少运算时间
return pow