边工作边刷题: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
posted @ 2016-04-18 11:06  absolute100  阅读(102)  评论(0编辑  收藏  举报