0x01.問題
實現 int sqrt(int x) 函數。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1:
輸入: 4 輸出: 2
示例 2:
輸入: 8 輸出: 2 說明: 8 的平方根是 2.82842…,
由於返回類型是整數,小數部分將被捨去。
0x02.解決思路
- 問題的關鍵當然不是直接去調用相關的庫函數(也會存在精度不足),而是自己去思考一些其他的思路。
- 最爲簡單的思路是把
0-x
看成有個有序集,在其中進行二分搜索,找到最後一個平方數小於等於x
的數,這個數就是我們需要求得的答案。
0x03.解決代碼–二分搜索
class Solution {
public int mySqrt(int x) {
int left=0;
int right=x;
int ans=-1;
while(left<=right){
int mid=left+(right-left)/2;
if((long)mid*mid<=x){
ans=mid;
left=mid+1;
}else{
right=mid-1;
}
}
return ans;
}
}
ATFWUS --Writing By 2020–05-09