一、问题描述:
Implement int sqrt(int x)
.
Compute and return the square root of x.
二、解决思路
看到代码中返回类型是Int, 非常开心! 二分法~~ 但是需要注意边界值 MAX_INT. 而且MAX_INT的平方我们已知是46340, 我们在初始化的时候end =(x+1)/2,
如果end > 46340的话,end*end就超过Int 的最大值,我们此时把end置为46340(注意不会影响结果)。
三、代码:
public class Solution {
public int mySqrt(int x) {
if (x == 0 || x == 1)
return x;
int begin = 1;
int end = (x + 1) / 2;
if (x + 1 < 0) {
end = 46340;
return end;
}
end = end > 46340 ? 46340 : end;
if (end * end == x) {
return end;
}
int tmp = 0;
while (begin < end - 1) {
int mid = begin + (end - begin) / 2;
tmp = mid * mid;
if (tmp == x) {
return mid;
}
if (tmp < x) {
begin = mid;
} else {
end = mid;
}
}
return begin;
}
}