原题链接:http://www.lintcode.com/zh-cn/problem/sqrtx/
实现 int sqrt(int x)
函数,计算并返回 x 的平方根。
样例
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
直接上代码吧
class Solution {
/**
* @param x: An integer
* @return: The sqrt of x
*/
public int sqrt(int x) {
// write your code here
int low = 1;
int high = x;
int mid = 0;
while (low <= high) {
mid = low + (high - low) / 2;
if (mid == x / mid) {
return mid;
} else if (mid > x / mid) {
high = mid;
} else {
low = mid;
}
if ((low < x / low) && (high > x / high) && (low == high - 1)) {
return low;
}
}
return 0;
}
}
主要是利用二分的思想,但是有些和二分不一样,就是当mid > x / mid时,high = mid, 而不是high = mid - 1.
另外一个特别需要注意的地方就是数的范围,之所以写成mid == x / mid, 还有后面的 mid > x / mid, low < x / low, high > x / high, 是因为如果两个int直接相乘,结果会超过Integet.MAX_VALUE, 导致出错,所以改用除法。还有mid = low + (high - low) / 2也是一样