记录刷题的过程。牛客和力扣中都有相关题目,这里以牛客的题目描述为主。该系列默认采用python语言。
1、问题描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
2、数据结构:
二分查找变形
3、题解:
方法1:递归
从二分角度理解
当n为非负数时
然后当n为负数时,处理一下,变为
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
def quickmul(exponent):
if exponent == 0:#结束条件
return 1.0
y = quickmul(exponent // 2)
return y * y if exponent % 2 ==0 else y * y * base
return quickmul(exponent) if exponent >= 0 else 1.0 / quickmul(-exponent)
方法2:分治思想
快速幂
从二进制角度理解
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
#分治
if base == 0:
return 0.0
res = 1
if exponent < 0:
base,exponent = 1/base,-exponent
while exponent:
if exponent & 1: # 等价于n % 2 == 1
res *= base
base *= base
exponent >>= 1 #等价于n //= 2
return res
4、复杂度分析:
方法1:
时间复杂度:O(logN)
空间复杂度:O(logN)
方法2:
时间复杂度:O(logN)
空间复杂度:O(1)