您的位置:首页 > 其它

Leetcode50 Pow(x, n)

2015-08-09 15:41 495 查看

Pow(x, n)

Implement pow(x, n).

Solution1

最简单的方法当然就是按照幂运算的规则一个一个去乘方了。如下:

public class Solution {
public double myPow(double x, int n) {
if(x>-0.000001&&x<0.000001) return 0;
if(n==0) return 1;
boolean flag = n>0?true:false;
n = (n>0?n:-1*n);
double res = 1;
while(n-->0) res *= x;
return flag?res:1/res;
}
}


Solution2

解法一可行,但是OJ时报超时错误。时间复杂度还可以做得更好一些。

public class Solution {
public double myPow(double x, int n) {
if(x>-0.000001&&x<0.000001) return 0;
if(n==0) return 1;
boolean flag = n>0?true:false;
n = (n>0?n:-1*n);
double t = myPow(x,n/2);
if((n&1)==0) t *= t;
else t = t*t*x;
return flag?t:1/t;
}
}


这样的时间复杂度为O(logN).

Solution3

另外观察到负数在求模的过程中的特点:-5/2=-2; -4/2=-2; -3/2=-1; 可以进一步将解法二的代码简化如下:

public class Solution {
public double myPow(double x, int n) {
if(n==0) return 1;
if(x==0) return 0;
double t = myPow(x,n/2);
if((n&1)==0) return t*t;//必定是正数且为偶数
else return n<0?(1/x*t*t):(x*t*t);//注意不是1/(x*t*t)
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode