/*首先要考虑n的大小,因为大小0和小于0是不同的结果
首先我们要考虑
x^2→x^4→9→x^19→x^38→x^77
x→x^2→x^4→x^8→x^16→x^32→x^64
时间复杂度O(logn) 空间复杂度O(logn)
*/
class Solution {
public double myPow(double x, int n) {
long N = n;
return N>=0 ? compete(x,N) : 1/compete(x,-N);
}
private double compete(double x , long N){
if(N==0)
return 1.0;
double y = compete(x , N/2);
return N%2 == 0 ? y*y : y*y*x;
}
}
//迭代法 时间复杂度O(logn) 空间复杂度O(1),看题解
class Solution {
public double myPow(double x, int n) {
long N = n;
return N>=0 ? compete(x,N) : 1/compete(x,-N);
}
private double compete(double x , long N){
double res = 1.0;
double y = x;
while(N>0){
if(N % 2==1)
res*=y;
y*=y;
N/=2;
}
return res;
}
}