Leetcode: Pow(x, n)

Implement pow(xn).

public double pow(double x, int n) {
    // Start typing your Java solution below
    // DO NOT write main() function
    boolean positive = n >= 0 ? true : false;

    int nabs = n == Integer.MIN_VALUE ? Integer.MAX_VALUE : Math.abs(n);

    double product = n == Integer.MIN_VALUE ? powHelp(x, nabs) * x : powHelp(x, nabs);

    return positive ? product : 1 / product;

}

public double powHelp(double base, int n) {
    if (n == 0) {
        return 1;
    }
    if (n == 1) {
        return base;
    }

    double tmp = powHelp(base, n / 2);
    return tmp * tmp * powHelp(base, n % 2);
}

O(logN)

Version with no helper function

public double myPow(double x, int n) {
        if(n==0){
            return 1;
        }
        int n_abs = Math.abs(n);
        if(n_abs==1){
            return n>0?x:1/x;
        }
        double tmp =  myPow(x, n/2);
        return tmp*tmp*myPow(x, n%2);
    }
FacebookTwitterGoogle+Share

Leave a Reply

Your email address will not be published. Required fields are marked *