Sqrt(x)
Implement int
sqrt(int x)
.Compute and return the square root of x.
求给定数字x的平方根。具体解法类似于一个变形的二分搜索,判断数字1..x的中间数的平方与x的大小来决定在左半边还是右半边继续搜索。
需要小心的是中间变量要用long来保存以防乘法结果溢出。
public int mySqrt(int x) {
long left = 1;
long right = x;
while (left + 1 < right) {
long mid = left + (right - left)/2;
if (mid * mid < x) {
left = mid;
} else if (mid * mid > x) {
right = mid;
} else {
return (int) mid;
}
}
if (right * right <= x) {
return (int) right;
}
return (int) left;
}