Pow(x, n)
Implement pow(x, n).
分析:
实现pow函数,注意,这里的n是int类型,比较简单,使用二分法。
代码:
class Solution(object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
if n < 0:
return 1 / self.cal(x, -n)
return self.cal(x, n)
def cal(self, x, n):
if n == 0:
return 1
if n == 1:
return x
t = self.cal(x, n/2)
if n % 2 == 0:
return t*t
return t*t*x
----------------------------------------------------------------------------------------------------------------
2016-04-28补充:修改一下上面的代码,同时补充一种更为高效的利用位运算的代码。
对于二分法,之前写的代码可以进行优化。
代码为:
class Solution(object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
if n == 0:
return 1
if n == -1:
return 1 / x
return self.myPow(x*x, n/2)*([1, x][n%2])
对于位运算方式,注意到如果要求A的n次幂,比如当n为11时,其11的二进制表示为1011,则A^n = A^(2^3) * A^(2^1) * A^(2^0) = A^8 * A^2 * A,这样我们只需要计算3次即可得到所需要的A的n次幂了。
我们可以利用上述2进制和幂的关系进行求解。(更多关于快速幂运算的知识请自行百度谷歌)
代码为:
class Solution(object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
absn = abs(n)
res = 1
while absn:
if absn & 1:
res *= x
x *= x
absn >>= 1
return res if n > 0 else 1.0 / res