一、题设
实现 pow(x, n) ,即计算 x
的整数 n
次幂函数(即,xn
)。
示例 1:
输入:x = 2.00000, n = 10 输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3 输出:9.26100
示例 3:
输入:x = 2.00000, n = -2 输出:0.25000 解释:2-2 = 1/22 = 1/4 = 0.25
二、基本思路
1.递归:
在这里拿举例:
=
*
*
=
*
*
*
*
……不难看出可以用分治的思想不断地降幂至
,而在分解的过程中,若是奇数次幂则要
*
再额外乘上一个
,若是偶数次幂则就为
*
.当次数为0时,返回1回归即可.
2.位操作:
将幂次看成二进制存储,当位次遇到1时即是有权值,需要计入最后的结果中,若没有权值(0时),则不需要计入最后的结果中,每次都要进行升权操作 x = x * x.这题有点子像LeetCode刷题(python版)——Topic29两数相除,可以并案侦查:-)
三、代码实现
1.递归:
def myPow(self, x, n):
def recursion(m):
if m == 0:
return 1.0
half = recursion(m // 2)
if m % 2 == 0:
return half * half
else:
return half * half * x
return recursion(n) if n > 0 else 1.0 / recursion(-n)
2.位操作:
def myPow(self, x, n):
xx,nn = x,n
if nn < 0:
return 1.0 / self.myPow(xx,-nn)
res = 1
while nn:
if nn & 1:
res *= xx
xx *= xx
nn >>= 1
return res
四、效率总结
1.递归:
2.位操作: