题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
解题思路
- 笨方法
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
ans = 1
e = exponent
if e<0:
e = -e
e -= 1
while(e>=0):
ans = ans*base
e -= 1
return ans if exponent>0 else 1/ans
- 二分法
如果exponent是偶数,那么结果为
Power(base, exponent/2)**2
如果exponent是奇数,那么结果为
(Power(base, exponent/2)**2)*base
再加上指数为负数的情况,代码如下
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
# if exponent<0:
# base = 1/base
if exponent == 0:
return 1
if exponent == 1:
return base
if exponent<0:
base = 1/base
exponent = -exponent
if exponent%2 == 0:
ans = self.Power(base, int(exponent/2))**2
return ans
else:
ans = (self.Power(base, int(exponent/2))**2)*base
return ans
- 快速幂
时间复杂度:O(logn),因为n的二进制位个数为logn
空间复杂度:O(1)
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
if exponent<0:
base = 1/base
exponent = -exponent
ans = 1
while exponent>0:
# 判断指数是否为奇数,如果是,则还需要乘上一个base
if((exponent&1)==1):
ans *= base
exponent = exponent>>1 # 相当于除以2,并且是向下取整
base *= base
return ans