问题描述:
计算 pow(x, n)
,也就是计算 x 的 n次方。
算法思路:
首先来考虑 n 的二进制表示,比如,n 的二进制形式为 ‘10001011’,那么 x^n=x^(1+2+8+128)=x^1*x^2*x^8*x^128
,也就是说 x^n 可以拆成几个数的乘积。在此基础上,可以通过遍历 n 的每一个二进制比特位,如果第 i 个比特是 1,那么我们就在结果上加上 x^(1 << i)
。这样最大时间复杂度为 log(d) ,d 为 n 的二进制长度。
代码如下:
class Solution(object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
def pow(base, exp):
result = 1.0
if exp & 1 > 0:
result *= base
while exp > 0:
base *= base
exp = exp >> 1
if exp & 1 > 0:
result *= base
return result
if n > 0:
return pow(x, n)
elif n < 0:
return 1/pow(x, -n)
else:
return 1