题目
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。
来源:力扣(LeetCode)
思路
能想到的方法就是算某值的平方,然后去和x比较大小。
为压缩查找的时间,此处采用二分搜索法来找平方根;
还有,此处如果x为整型最大值,再加1就会溢出,
所以,返回值是 right-1,因为题中要把小数部分减去,只有减1才会得到正确值。
C++代码
class Solution {
public:
int mySqrt(int x)
{
if (x <= 1)
{
return x;
}
int left = 0, right = x;
while (left < right)
{
int mid = left + (right - left) / 2;
if (x / mid >= mid)
{
left = mid + 1;
}
else
{
right = mid;
}
}
return right - 1;
}
};