题目描述

实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例:

输入: 2.00000, 10
输出: 1024.00000

python代码

根据题意,要对x乘n次,如果用直接遍历n次,那么复杂度为O(n),考虑二分查找的思想,每次x *= x,那就是成倍地增加,复杂度为O(logn)
因此,只需要一边记录x累乘的结果,一边记录累乘的次数,当累乘次数的两倍大于n时,n减去此次的累乘次数,再对剩余的幂次进行递归,将每次递归的累乘结果都累乘,作为返回。
最后,再考虑符号问题。
注意:首次调用递归时要对x和n取绝对值

class Solution:
def myPow(self, x: float, n: int) -> float:
res = self.bin_recursion(abs(x), abs(n))
res = -res if x < 0 and n % 2 !=0 else res
res = 1/res if n<0 else res
return res

def bin_recursion(self, x, n):
if n < 1:
return 1
product, num = x, 1
while num*2 <= n:
num += num
product *= product
return self.bin_recursion(x, n-num)*product

参考

​https://leetcode-cn.com/problems/powx-n/solution/pythonshi-xian-er-fen-cha-zhao-si-xiang-si-lu-xian/​