leetcode 타이틀 브러시 (47) -. 50 탕 (X, N)

즉 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;
        }
    }
}
게시 된 203 개 원래 기사 · 원 찬양 684 · 전망 890 000 +

추천

출처blog.csdn.net/u012124438/article/details/104088351