求开方
Input: 4
Output: 2
Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since we want to return an integer, the decimal part
题目描述:
给定一个整数,求该整数的开方数。
思路分析:
一个数 x 的开方 sqrt 一定在 0 ~ x 之间,并且满足 sqrt == x / sqrt。可以利用二分查找在 0 ~ x 之间查找 sqrt。
对于 x = 8,它的开方是 2.82842...,最后应该返回 2 而不是 3。在循环条件为 l <= h 并且循环退出时,h 总是比 l 小 1,也就是说 h = 2,l = 3,因此最后的返回值应该为 h 而不是 l。
代码:
public int mySqrt(int x){
if(x<=1){
return x;
}
int l=1;
int h=x;
while(l<=h){
int mid=l+(h-l)/2;
int sqrt=x/mid;
if(sqrt==mid)
return mid;
else if(mid>sqrt){
h=mid-1;
}else{
l=mid+1;
}
}
return h;
}