Compute and return the square root of x.
一道设计题,实现sqrt方法,也就是开平方根。我们可以用二分法来做,设定left 为1, right为x, 用x / mid 和mid来进行比较(之所以用x / mid与mid比较,而不用x与mid*mid比较是因为mid*mid可能溢出,用x / mid可以防止溢出),如果x /mid 等于mid,就返回mid; 如果x /mid 小于mid,就让right = mid - 1; 如果x /mid 大于mid,就让left = mid + 1;直到left > right程序终止,这是left - 1恰好是我们要找的答案,返回就可以了。代码如下:
public class Solution { public int mySqrt(int x) { if(x <= 1) return x; int l = 1; int r = x; while(l <= r) { int mid = l + (r - l) / 2; if(x / mid == mid) return mid; if(x / mid > mid) { l = mid + 1; } else { r = mid - 1; } } return l - 1; } }