题目如题所示
代码+注释
class Solution {
public:
//由于返回的是整数,那么这就好弄了,利用二分搜整数就行了
int mySqrt(int x) {
int left = 0;
int right = x;
while(left<=right){
int mid = (left+right)/2;
//注意右边的转long防止溢出
long target = (long)mid*mid;
if(target==x)
return mid;
else if(target>x){
//一旦平方大了,就缩小右边界
right = mid-1;
}else{//由于题目说明是向下取整,所以在平方小于x的时候进行特殊判断
long t = (long)(mid+1)*(mid+1);
if(t>x)
return mid;
left = mid+1;
}
}
//如果跳出了while循环则说明给定的数有问题
return -1;
}
};