즉 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 비트 부호있는 정수
방법 1 : 일반적인 관행의 비교, 면접관은 분명이보고 싶어하지
class Solution {
public double myPow(double x, int n) {
long N = n;
if (N < 0) {
x = 1 / x;
N = -N;
}
double ans = 1;
for (long i = 0; i < N; i++)
ans = ans * x;
return ans;
}
}
참고 :
여기에 첫 번째 긴 N 저장해야하는 이유 n은 음의 경계 음, INT이며, 전원 작동 긍정적 2147483647의 경계를 초과했습니다 긍정적 2147483648 될이 시간을 int로합니다 수행하는 경우 때문에, INT 범위는 2147483647 -2147483648입니다
복잡도 분석
시간 복잡도 :. O (n)이 우리가 지속적으로 곱 X n 번해야합니다.
공간의 복잡성은 :. 우리는 최종 결과를 저장하는 변수는 곱셈 X 필요 (1) O.
방법 2 : 재귀, 반 운영
class Solution {
public double myPow(double x, int n) {
long N = n;
if(n==0){
return 1.0;
}
if(N<0){
x=1/x;
N=-N;
}
return quick(x,N);
}
public double quick(double x,long n){
if(n==1){
return x;
}
double half = quick(x,n/2);
long res = n%2;
if(n%2==0){
return half*half;
}else {
return half*half*x;
}
}
}