题干:
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
https://leetcode-cn.com/problems/sqrtx/
代码:
int mySqrt(int x){
int left=1;
int right=x/2+1;
long mid;
while (left<=right){
mid=left+(right-left)/2;
if (mid*mid>x){
right=mid-1;
}else if(mid*mid<x){
left=mid+1;
}else{
return mid;
}
}
return right;
}
思路:
采用二分法解题,定义整型的左右边界以及长整型变量mid,由于要求输出整数,故在if语句中使用right=mid+1这种语句来进行缩小范围。由于定义整型的mid可能造成溢出,我将mid定义为长整型,这种做法其实不算严谨,可以把if语句的判断条件改为
mid>x/mid以及mid<x/mid
运行结果: