思路:注意结果向下取整; 使用二分法,通过mid*mid<=x,找到这个mid值
import java.util.*; public class Solution {
/**
*
* @param x int整型
* @return int整型
*/
public int mysqrt (int x) {
if(x<1) return 0;
//定义变量为long型,否则程序运行结果错误,因为后面会有mid*mid会大于int型
long left=1,right=x,mid=(left+right)/2;
while(mid!=left){ //由于题目要求向下取整,最后结果都会出现mid==left的场景
if(mid*mid==x) {
break;
}
else if(mid*mid<x) {
left = mid; //重新定义左节点
}
else {
right = mid; //重新定义右节点
}
mid=(left+right)/2;
}
return (int)mid;
}
}