1.题目
实现 int sqrt(int x)
函数,计算并返回 x 的平方根。
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
2.算法
这道题是数值计算的题目,用二分法解,我们知道结果的边界,取左边界和右边界,每次去掉不符合条件的一半,直到左边界和右边界相遇
public int sqrt(int x) {
// write your code here
if (x < 0)
{
return -1;
}
if (x == 0)
{
return 0;
}
int l = 1;
int r = x / 2 + 1;
//为什么是小于等于 例如当x=1时,l=r=1,下面对,否则错
while (l <= r)
{
int m = (l + r) / 2;
if (m <= x / m && m + 1 > x / (m + 1) )
{
return m;
}
if (m > x / m) //r较大
{
r = m - 1;
}
else //l较小
{
l = m + 1;
}
}
return 0;
}
def sqrt(self, x):
# write your code here
l, r = 1, x;
while l + 1 < r:
m = (l + r) / 2
if m * m == x:
return m
elif m * m > x:
r = m
else :
l = m
if r * r <= x:
return r
return l