首页 > 代码库 > Leetcode-Pow(x,n)

Leetcode-Pow(x,n)

Implement pow(x, n).

Analysis:

x^n = x^(n/2)*x^(n/2) (*x, if n is odd).

NOTE: We need consider n<0, AND if n=Integer.MIN_VALUE, -n is actually larger than Integer.MAX_VALUE by 1, so we cannot simply take -n.

Solution:

 1 public class Solution { 2     public double pow(double x, int n) { 3         if (x==0) return 0; 4         if (n==0) return 1; 5        6         double res; 7         if (n>0) 8             res = powRecur(x,n); 9         else{10             if (n>Integer.MIN_VALUE)11                 res = powRecur(x,-n);12             else {13                 res = powRecur(x,-(n+1));14                 res = res*x;15             }16             res = 1 / res;17         }18         return res;19         20     }21 22     public double powRecur(double x, int n){23         if (n==1) return x;24 25         double temp = powRecur(x,n/2);26         double res = temp*temp;27         if (n%2==1) res = res*x;28         return res;29     }30 }

Solution 2:

Another method is to directly take care of the negative power in the recursion function.

 1 public class Solution { 2     public double pow(double x, int n) { 3         if (x==0) return 0; 4         if (n==0) return 1; 5        6         double res; 7         res = powRecur(x,n); 8         return res; 9         10     }11 12     public double powRecur(double x, int n){13         if (n==1) return x;14         if (n==-1) return 1/x;15 16         double temp = powRecur(x,n/2);17         double res = temp*temp;18         if (n%2==1) res = res*x;19         if (n%2==-1) res = res*(1/x);20         return res;21     }22 }

 

Leetcode-Pow(x,n)