这道题是LeetCode里的第69道题。
题目描述:
实现
int sqrt(int x)
函数。计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4 输出: 2
示例 2:
输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
使用二分法,low,high,mid,循环递归调用就完事了。
注:数学方法可以使用牛顿迭代法,或是基本不等式。
解题代码:
class Solution {
public int mySqrt(int x) {
return merge(1, x/2, x);
}
public int merge(long low, long high, long x) {
if(x == 1)return 1;
if(x == 5 || x == 4)return 2;
long mid = (low + high) / 2;
if(mid*mid == x || mid == low)return (int)mid;
if(mid * mid > x) {
return merge(low, mid, x);
}else {
return merge(mid, high, x);
}
}
}
提交结果:
个人总结:
当 x = 4 或 5 时,出现错误解答,没有充分考虑到特殊的情况。