Implement pow(x, n).
Реализуйте pow(x, n).
// C++
class Solution {
public:
double myPow(double
x, int n) {
}
};
// Java
public class Solution {
public double myPow(double x, int n) {
}
}
recursion
Let’s implement the power function with complexity O(log2n), because
for example if x = 1, n = 109 the algorithm with linear
complexity gives Time Limit Exceeded.
The degree n can
be negative, in this case first evaluate temp = x|n|, and return 1 / temp.
The degree must be converted to long long type. If n = -2147483648, the value -n does not fit in int.
рекурсия
Реализуем возведение в
степень с оценкой O(log2n),
так как например при x = 1, n = 109 линейная оценка не
пройдет по времени.
Степень n может быть отрицательной, в таком
случае сначала вычислим temp = x|n|, и вернем 1 / temp.
Степень следует
преобразовать в тип long long. Например, при n = -2147483648 значение -n уже не будет помещаться в int.
Реализация алгоритма
class Solution
{
public:
double Pow(double x, long long n)
{
if (n == 0) return 1;
if (n % 2 == 0)
{
double temp = Pow(x,n/2);
return temp * temp;
}
else
return x * Pow(x,n-1);
}
double myPow(double
x, int n)
{
int sign = (n >= 0) ? 1 : -1;
long long nn = n;
if (nn < 0) nn = -nn;
double temp = Pow(x,nn);
if (sign < 0) temp = 1 / temp;
return temp;
}
};
Java реализация
public
class Solution
{
public double Pow(double x, long n)
{
if (n == 0) return 1;
if (n % 2 == 0)
return Pow(x*x,n/2);
else
return x * Pow(x,n-1);
}
double myPow(double
x, int n)
{
int sign = (n >= 0) ? 1 : -1;
long nn = n; // if n =
-2147483648, -n does not fit in int
if (nn < 0) nn = -nn;
double temp = Pow(x,nn);
if (sign < 0) temp = 1 / temp;
return temp;
}
}