数值的整数次方

来源:互联网 发布:电脑打开淘宝口令 编辑:程序博客网 时间:2024/05/24 06:50

题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解法一:

class Solution:    def Power(self, base, exponent):        return base ** exponent

…..,这样是找不到工作的!
解法二:
递归,时间复杂度变为logn

class Solution:    def Power(self, base, exponent):        flag = 0        if exponent ==0:            return 1        elif exponent <0:            flag = 1            exponent = exponent * -1        if exponent % 2 == 0:            result = self.Power(base, exponent / 2)*self.Power(base, exponent / 2)        elif exponent % 2 == 1:            result = self.Power(base, (exponent -1)/ 2)*self.Power(base,  (exponent -1)/ 2) * base        return 1 / result if flag else result

解法三:
快速幂,时间复杂度也为logn,意思是把次方化为二进制,例如base为2,exponent为15,那么二进制就为1111,既可以按位拆成 0001,0010,0100,1000,十进制分别为1,2,4,8,这就相当于2^1*2^2*2^4*2^8,那么我们只有令temp=2,然后temp*=temp,就一次求出这四项,然后让结果等于这四项的累乘就可以了。

class Solution:    def Power(self, base, exponent):        flag = 0        if exponent == 0:            return 1        elif exponent <0:            flag = 1            exponent *= -1        result = 1        temp = base        while exponent:            if exponent & 1: #若最后一位是1则让result*temp                result = result * temp            temp *= temp            exponent = exponent >> 1 #右移,因为是整数,当1全部移出后exponent为0        if flag == 1:            result = 1 / result        return result
原创粉丝点击