不能使用for(;;) 因为定义的是int类型。
以取中间值的方法,通过层层的取中值最后将范围缩小逐渐确定值。(返回值时要进行强转)
public class S_069 {
public int mySqrt(int x) {
// 定义变量
long head = x;
long tail = 0;
// x/2的平方一定大于x,所以从x/2开始
long mid = (head/2);
// 特殊情况
if(x == 0 || x==1){
return x;
}
// 默认是一个死循环 直至返回值
while(mid > 0){
// 本数平方大于x本数加1平方小于x
if(mid*mid <= x && (mid+1)*(mid+1) > x ){
// 返回的时候强转
return (int)mid;
}
// 平方大于x 将mid值设为头 然后重新得到中间值
if(x<mid*mid){
head = mid;
mid = tail + (mid-tail)/2;
// 平方小于x 将mid值设为尾 然后重新得到中间值
}else{
tail = mid;
mid = mid + (head -mid)/2;
}
}
return (int)mid;
}
最快的方法
class Solution {
public int mySqrt(int x) {
int result=(int)Math.sqrt(x);
return result;
}
}