求x的n次方,以求2的10次方为例。
法一:快速幂解析(二进制角度)
- 以res=1初始化最终结果。将n表示成二进制的形式,存放在一个数组里。n1=[0101],数对应下标。
- 遍历n1数组,同时不断刷新x的值,x=xx,然后再以下标对应的n1,若n1[i]=1,res=x,若n1[i]=0则不执行。
- 考虑到n可能为负数,此时只需要对前面的结果求导,故设置一个flag,判断n是否为负数,是负数则输出1/res,否则输出res
class Solution:
def myPow(self, x: float, n: int) -> float:
res=1
n2=[]#二进制表示
flag=1
if n<0:
flag=-1
n=abs(n)
while n>0:
n2.append(n%2)
n//=2
k=1
len_n2=len(n2)
if len_n2>0 and n2[0]==1:
res*=x
while k<len_n2:
x=x*x
if n2[k]==1:
#n1.append(x)
res*=x
k+=1
if flag==1:
return res
else:
return 1/res