题目描述
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
题解
首先,很容易想到的是递归求解(会导致栈溢出)
class Solution {
public double myPow(double x, int n) {
if(n==0)
return 1.0;
if(n<0)
return 1.0/myPow(x,-n);
return x*myPow(x,n-1);
}
}
这道题目考查我们如何处理越界问题,例如n为-128时,我们如果直接取绝对值,这时n就会越界,我们要单独考虑这种情况。其次为了提高运算速度,我们用位移来处理每次运算。实现代码如下:
public class Solution {
public double myPow(double x, int n) {
if(n == 0)
return 1.0;
if(n < 0) {
if(n == Integer.MIN_VALUE)
return 1.0 / (myPow(x, Integer.MAX_VALUE) * x);
return 1.0 / myPow(x, -n);
}
double ans = 1.0 ;
for(; n > 0; n >>= 1) {
if((n & 1) > 0)
ans *= x;
x *= x;
}
return ans;
}
}