概要
題目來源鏈接:https://leetcode-cn.com/problems/sqrtx/
難度:簡單
類型:每日一題
題目
實現 int sqrt(int x) 函數。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。
示例
示例 1:
輸入: 4
輸出: 2
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842...,
由於返回類型是整數,小數部分將被捨去。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sqrtx
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
分析
第一種思路,暴力破解。
第二種思路,是看題解想出來的思路,但是最後處理2147395599這個數的時候超時了,自己的編譯器會得出結果,但是提交給LeetCode會超時,其實還是暴力破解。
第三種思路就是官方題解,也就是二分法。
代碼
第一種思路
/**
* 求x的平方根(第一種算法:暴力破解)
* @param x
* @return
*/
public int mySqrt(int x) {
int k = 1;
while (x / k >= k) {
k++;
}
return k - 1;
}
第二種思路
/**
* 求x的平方根
* @param x
* @return
*/
public long mySqrt(int x){
if(x==0){
return (int)x;
}
if(x==1){
return (int)x;
}
long low=0;
long high=x;
long mid=-1;
while (low<high){
mid=(high-low)/2;
if(mid*mid<=x){
return (int)mid;
}else if(mid*mid>x){
high-=1;
}
}
return (int)mid;
}
第三種思路
public int mySqrt(int x){
int low = 0, high = x, ans = -1;
while (low <= high) {
int mid = low + (high - low) / 2;
if ((long)mid * mid <= x) {
ans = mid;
low = mid + 1;
}
else {
high = mid - 1;
}
}
return ans;
}