剑指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
        is_negative = False
        if exponent < 0:
            is_negative = True
        exponent = abs(exponent)
        if base == 0:
            return 0
        elif exponent == 0:
            return 1
        if exponent % 2 == 0:
            res = 1
        else:
            res = base
        exponent = exponent // 2
        count = 1
        while exponent > 0:
            m = exponent % 2
            exponent = exponent // 2
            if m == 1:
                cur = base
                for i in range(count):
                    cur *= cur
                res *= cur
            count += 1
        return 1 / res if is_negative else res

结果:

运行时间:32ms

占用内存:5860k

猜你喜欢

转载自blog.csdn.net/qq_38650545/article/details/86242216