边工作边刷题:70天一遍leetcode: day 30-1
Pow(x, n)
recursion的方法很直观,这题难想的是如何用iteration来解。iteration解法的逻辑有两点,一是利用公式x^n = x^(2*n/2) = (x2)(n/2),所以每次阶数减半,而基数增倍。第二,如果阶数不是even,结果要提前乘上多余的部分。最终阶数会减到1,这时总是要乘上update后的基数得到结果。
class Solution(object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
sign = -1 if n<0 else 1
n = abs(n)
res = 1
while n>0:
if n&1==1:
res *= x
x*=x
n>>=1
if sign==-1:
return 1/res
return res