剑指offer 第12题 数值的整数次方

描述:

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

思路:

方法一:return base ** exponent

方法二:二进制,例如exponent=5,可以分解为1 * (2 ** 2) + 0 * (2 **1) + 1 * (2 ** 0),这样就可以将问题简化为在二进制当前位不为0的时候累乘base,这样相当于每次将base进行平方,复杂度降为log(n),这个思路需要注意如果是负次方,按照正次方处理,最后取倒数。

代码:

class Solution:
    def Power(self, base, exponent):
        # write code here
        if base == 0 and exponent < 0:
            return None
        if base == 0 or base == 1:
            return base
        if exponent == 0:
            return 1
        n = False
        if exponent < 0:
            n = True
            exponent = -exponent
        s = bin(exponent)[2:][::-1]
        res = 1
        cur = base
        for i in s:
            if i == '1':
                res *= cur
            cur = cur * cur
        return res if not n else 1 / res

结果:

运行时间:32ms

占用内存:5860k

你可能感兴趣的:(剑指offer)