题目大意
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
解题思路
采用二分的思想。
- x / mid == mid:直接返回mid;
- x / mid > mid:表示mid的值取小了,应该加大mid;
- x / mid < mid:小时mid的值取大了,应该减小mid;
class Solution {
public:
int mySqrt(int x) {
if (x <= 1)
return x;
int left = 1, right = x, mid = 0;
while (left <= right){
mid = left + (right - left) / 2;
if (x / mid > mid)
left = mid + 1;
else if (x / mid < mid)
right = mid - 1;
else
return mid;
}
return right;
}
};