题目描述
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例
示例 1:
输入: 4 输出: 2 示例 2:
输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/sq…
实现
// 使用二分法更快的找到该数
int mySqrt(int x)
{
if (x == 0 || x == 1) {
return x;
}
// x的平方根,最大可能就是x,最小可能是1(0的情况前面已经处理)
int left = 1;
int right = x;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (x / mid == mid) {
return mid;
} else if (x / mid > mid) { // mid * mid < x; 。x的平方根肯定在mid右边
left = mid + 1;
} else {
right = mid - 1;
}
}
return right;
}