Implement pow(x, n).
觉得这道题看似简单,但是却有很多细节上容易忽略的点。
在此转了别人的考虑的地方及代码
1) x取值为0时,0的正数次幂是1,而负数次幂是没有意义的;判断x是否等于0不能直接用“==”。
2) 对于n取值INT_MIN时,-n并不是INT_MAX,这时需要格外小心。
3) 尽量使用移位运算来代替除法运算,加快算法执行的速度。
public class Solution {
public double myPow(double x, int n) {
if (n<0) {
if (n == Integer.MIN_VALUE) {
return 1.0/(myPow(x, Integer.MAX_VALUE)*x);
}else {
return 1.0/myPow(x, -n);
}
}
if (n == 0) {
return 1.0;
}
double result = 1;
for (; n > 0; x *= x, n >>= 1) {
if ((n & 1) > 0) {
result *= x;
}
}
return result;
}
}
Run Time:275 ms