LeetCode 第50题 Pow(x, n) [log(n)]

来源:互联网 发布:手机直播源码教程 编辑:程序博客网 时间:2024/05/17 13:41

问题描述:

计算 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
0 0
原创粉丝点击