69. x 的平方根
一、題意
實現 int sqrt(int x) 函式。
計算並返回 x 的平方根。
x 保證是一個非負整數。
案例 1:
輸入: 4
輸出: 2
案例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…, 由於我們想返回一個整數,小數部分將被捨去。
二、分析和解答
一開始,最笨的做法,從0到n遍歷,程式碼:
public int mySqrt(int x) {
int res = 0;
for(int i=1;i<=x;i++){
if((x / i >= i) && (x / (i+1 )< (i+1))){
res = i;
break;
}
}
return res;
}
我一開始錯誤的寫法:i * i <= x && (i+1)* (i+1) > x。這樣會導致溢位。應該如上寫成除法!
public int mySqrt(int x) {
int low = 1;
int high = x;
while(low <= high){
int mid = (high + low) / 2;
if(x / mid < mid){
high = mid - 1;
}else if(x / mid > mid){
low = mid + 1;
}else
return mid;
}
return low-1;
}
我最後依舊是判斷不準確是 low 還是 low - 1,所以,下次碰到類似的情況,找個例子試一下!