Implement int sqrt(int x)
.
Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
Example 1:
Input: 4 Output: 2
Example 2:
Input: 8 Output: 2 Explanation: The square root of 8 is 2.82842..., and since the decimal part is truncated, 2 is returned.
题目大意:
输出一个int范围内整数的平方根的整数部分。
解题思路:
通过二分查找出最佳位置。在判断时注意由于二分之后有些mid依然很大会超出int,所以我们可以用INPUT/mid来判断。
此处代码mid的始终指向的是中间偏左的数。
class Solution {
public:
int mySqrt(int x) {
if(x==0) return 0;
int l = 1, r = x;
while(true){
int mid = l + (r-l)/2;
if(mid > (x/mid)) r = mid-1;
else if(mid+1 > (x/(mid+1))) return mid;
else l = mid+1;
}
}
};
其实直接遍历1-46339也是可以过的。
class Solution {
public:
int mySqrt(int x) {
// cout << 46339*46339 << endl;
for(int i = 0; i<=46340 ;i++){
if (i*i>=x) return i*i>x?i-1:i;
}
return 46340;
}
};