1.题目
2.题目意思
自己实现x的n次幂计算函数。
3.代码
class Solution:
def myPow(self, x: float, n: int) -> float:
res = 1.0
flag = True
if n<0:
flag = False
n = -n
i = n
while i != 0:
if i%2 != 0:
res=x*res
x=x*x
i = i//2
return res if flag else 1/res
思路:快速幂~
直接拿个简单的例子讲得更清楚。不妨假设x=2,n=10。即求2的10次方幂。
首先res=1.0
是用来保存结果的。先看n能否被2整除,能的话,求2^10
变成了求4^5
。继续循环,5不能被2整除。那么就将4^5
分一个4给res
。res
变成1*4=4
,剩下4^4
就变成了16^2
,也就是4^4=4^(2*2)=(4^2)^2=16^2
。接着2也可以被2整除,16^2
就变成了256^1
,最后1不能被2整除,分一个256给res
,res
变成1024
,这个时候i=0,退出循环~就完事了
总的来说就是,2^10=4^5=4*4^4=4*16^2=4*256^1=4*256=1024
,复杂度只有O(logN).
冲冲冲~