Implement int sqrt(int x).
Compute and return the square root of x.
求一個整數x的平方根,返回int類型。
首先過濾x為負數的錯誤輸入;
其次x是0或者1的情況可以直接返回;
其余情況用二分法,左邊界初始為1,右邊界初始為x,最需要注意的地方是防止越界錯誤。為防止middle越界,middle求值表達式應寫為middle = left + (right - left) / 2,判斷middle和x的關系時,如果寫成middle * middle == x會有越界bug。
public int mySqrt(int x) {
if (x < 0) {
return 0;
}
if (x == 0 || x == 1) {
return x;
}
int left = 1, right = x;
while (left + 1 < right) {
int middle = left + (right - left) / 2;
if (middle == x / middle) {
return middle;
} else if (middle > x / middle) {
right = middle;
} else {
left = middle;
}
}
if (right <= x / right) {
return right;
}
return left;
}