69. x 的平方根

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuchonghao/article/details/79982156

一、题意
实现 int sqrt(int x) 函数。

计算并返回 x 的平方根。

x 保证是一个非负整数。

案例 1:

输入: 4
输出: 2
案例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842…, 由于我们想返回一个整数,小数部分将被舍去。

二、分析和解答
一开始,最笨的做法,从0到n遍历,代码:

public int mySqrt(int x) {
        int res = 0;
        for(int i=1;i<=x;i++){
            if((x / i >= i) && (x / (i+1)< (i+1))){
                res = i;
                break;
            }
        }
        return res;
    }

我一开始错误的写法:i * i <= x && (i+1)* (i+1) > x。这样会导致溢出。应该如上写成除法!

  public int mySqrt(int x) {
        int low = 1;
        int high = x;

        while(low <= high){
            int mid = (high + low) / 2;
            if(x / mid < mid){
                high = mid - 1;
            }else if(x / mid > mid){
                low = mid + 1;
            }else
                return mid;

        }
        return low-1;
    }

我最后依旧是判断不准确是 low 还是 low - 1,所以,下次碰到类似的情况,找个例子试一下!

还有人使用了牛顿迭代法,具有特殊性,我没那么高的要求,先不看了。请参考:https://blog.csdn.net/lzuacm/article/details/51335995

阅读更多

没有更多推荐了,返回首页