首先开方后的数肯定小于原数的一半,然后在之间进行折半查找,查找某一个数的平方等于x。但是因为int范围的限制,不能做乘法,用除法来判断;如果折半查找完成后任然没有找到,那么返回high位置的数即可。
class Solution {
public int mySqrt(int x) {
if (x == 0 || x == 1){
return x;
}
int low = 1;
int high = x / 2;
int mid;
while (low <= high){
mid = (low + high) / 2;
int temp = x / mid;
if (temp == mid){
return mid;
}else if (temp < mid){
high = mid - 1;
}else {
low = mid + 1;
}
}
return high;
}
}