https://leetcode-cn.com/problems/powx-n/solution/powx-n-by-leetcode-solution/
方法一:递归
Python
class Solution:
def myPow(self, x: float, n: int) -> float:
def quickMul(N):
if N == 0:
return 1.0
y = quickMul(N // 2)
return y * y if N % 2 == 0 else y * y * x
return quickMul(n) if n >= 0 else 1.0/quickMul(-n)
Java
class Solution {
public double quickMul(double x, int N) {
if (N == 0) {
return 1.0;
}
double y = quickMul(x, N / 2);
return N % 2 == 0 ? y * y : y * y * x;
}
public double myPow(double x, int n) {
return n >= 0 ? quickMul(x, n) : 1.0 / quickMul(x, -n);
}
}
方法二:迭代
Python
class Solution:
def myPow(self, x: float, n: int) -> float:
def quickMul(N):
ans = 1.0
x_contribute = x
while N > 0:
if N % 2 == 1:
ans *= x_contribute
x_contribute *= x_contribute
N //= 2
return ans
return quickMul(n) if n >= 0 else 1.0/quickMul(-n)
Java
class Solution {
public double quickMul(double x, long N) {
double ans = 1.0;
double x_contribute = x;
while (N > 0) {
if (N % 2 == 1) {
ans *= x_contribute;
}
x_contribute *= x_contribute;
N /= 2;
}
return ans;
}
public double myPow(double x, int n) {
long N = n;
return N >= 0 ? quickMul(x, N) : 1.0/quickMul(x, -N);
}
}