题目要求如下:
Implement int sqrt(int x)
.
Compute and return the square root of x.
题意就是自己implement一个sqrt()函数,不过input,output都是int型,就是返回整数(不是四舍五入),比如sqrt(3) = 1我写的代码如下:
class Solution {
public:
int sqrt(int x) {
if (x <= 0)
return 0;
else if (x == 1)
return 1;
else {
int low = 1;
int high = x;
int mid;
while (low <= high) {
mid = (high + low) / 2;
if (mid <= x / mid && (mid+1) > x / (mid+1))
return mid;
else if (mid > x / mid)
high = mid - 1;
else
low = mid + 1;
}
}
}
};
本质上就是个binary search,
(1)如果mid * mid <= x, 并且(mid+1)*(mid+1)<x,则mid即为该值
(2)如果mid*mid > x,则舍弃所有大于mid的值,将high置于mid - 1
(3)如果(mid+1)*(mid+1)<=x,则舍弃所有小于mid的值,low置于mid+1