題目詳情
實現 int sqrt(int x) 函數。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1:
輸入: 4
輸出: 2
示例 2:
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842...,
由於返回類型是整數,小數部分將被捨去。
——題目難度:簡單
-牛頓迭代法解題(C語言)
int mySqrt(int x){
if(x<2) return x;
double x1=x;
double fang=x1*x1;
//int eps = 1;
while((long long)fang>(long long)x){ //當x1*x1<=x的時候可以退出循環(可以理解爲一個作用域), 但也要小心越界
x1=0.5*(x/x1 + x1);
fang=x1*x1;
}
return (int)x1;
}
結果
-二分法解題(C++)
大致思路:因爲要返回的是x的平方根的整數部分(設爲k),其實k就是要滿足 k*k<=x 的最大值,用這條語句實現👉( l = mid + 1; //不斷更新l的值,也就是更新滿足條件的k值的最大值)
代碼如下
class Solution {
public:
int mySqrt(int x) {
int l = 0, r = x, ans = -1;
while(l<=r) {
int mid = (l+r)/2;
if( (long long)mid*mid <= x) {
ans = mid;
l = mid + 1; //不斷更新l的值,也就是更新滿足條件的k值的最大值
} else {
r = mid - 1;
}
}
return ans;
}
};
結果