leetcode解题-pow(x, n)


描述

Implement pow(x, n).

分析

二分法,递归很简单,迭代有一定技巧。

代码

递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class (object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""

if n == 0:
return 1.0
positive = n > 0
n = abs(n)
if n % 2 == 1:
r = x * self.myPow(x, n - 1)
else:
r = self.myPow(x, n / 2)
r = r * r
return r if positive else 1 / r

迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class (object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""

if n == 0:
return 1.0
if n < 0:
return 1.0 / self.myPow(x, -n)
left = x
right = 1.0
while n > 1:
if n % 2 == 1:
right *= left
left *= left
n /= 2
return left * right