声明:
今天是中等题第26道题。实现 pow(x, n) ,即计算 x 的 n 次幂函数。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10 输出: 1024.00000示例 2:
输入: 2.10000, 3 输出: 9.26100示例 3:
输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
- -100.0 < x < 100.0
- n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。
解法1。如果是一个个乘x肯定超时,考虑让要乘的x指数型增长,因为n无非就是奇数或偶数两种情况,讨论如下:
- n为奇数:res可以分解为
- n为偶数:res可以分解为
所以用迭代的方式,每次判断n的奇偶,让x成倍地增大即可,代码如下。
执行用时: 52 ms, 在Pow(x, n)的Python3提交中击败了79.47% 的用户
class Solution:
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
sign = 1 if n > 0 else -1
n = abs(n)
res = 1.0
while n != 0:
if n % 2 != 0:
res *= x
x *= x
n //= 2
return res if sign == 1 else 1/res
解法2。用递归的方式,确定好边界条件,分n为奇偶两种情况分开递归、返回即可,代码如下。
执行用时: 52 ms, 在Pow(x, n)的Python3提交中击败了79.47% 的用户
class Solution:
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
if n < 0:
x,n = 1/x,-n # n为负时要特别处理一下
elif n == 0:
return 1
if n % 2 == 0:
return self.myPow(x*x, n//2)
else:
return self.myPow(x*x, n//2) * x
结尾
解法1:http://www.cnblogs.com/grandyang/p/4383775.html
解法2:LeetCode