[leetcode]Pow(x, n)
Pow(x, n)
Implement pow(x, n).
算法思路:
二分法,没什么好说的,小心点就行;这个题时间比较苛刻。
return pow(x,n >> 1) * pow(x,n >> 1) 是过不去的,因此把pow(x,n / 2)求出来先。其实时间复杂度而言,是一样的。
【注意】:n的取值范围;n = Integer.MIN_VALUE时,-n是会越界的,因此我用了long进行了包装。
代码如下:
1 public class Solution { 2 public double pow(double x, int n) { 3 return pow(x,(long)n); 4 } 5 public double pow(double x,long n){ 6 if(x == 0 || x == 1) return x; 7 if(n == 0) return 1; 8 if(n == 1) return x; 9 if(n < 0) return 1 / pow(x,-n); 10 double tem = pow(x,n >> 1); 11 if((n & 1 )== 0){ 12 return tem * tem; 13 }else{ 14 return tem * tem * x; 15 } 16 } 17 }