leetcode 69. x 的平方根

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2

示例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 
     由于返回类型是整数,小数部分将被舍去。

解法一:

class Solution {
public:
    int mySqrt(int x) {  //二分法
        int low = 0;
        int up = x;
        while(low <= up){
            long mid = (low + up) / 2;
            long s = mid * mid;
            if(x == s) return mid;
            else if(x > s) low = mid + 1;
            else up = mid -1;
        }
        return up;
    }
};

注意mid和s的类型不能用int,用int的话可能会越界,会提示超出时间限制的错误。两个int相乘或者相加的结果不要再用int表示,可以考虑用long或long long。

解法二:

class Solution {
public:
    int mySqrt(int x) {  //牛顿迭代法
    if(x == 0) return 0;      
    double a = 0;  // b和a是相邻两次迭代结果 
    double b = 1;      // 在1附近开始找,迭代逼近目标值  
    while(abs(b-a) > 0.1)  // 判断条件为abs(b-a) > 0.1
    {  
        a = b;  
        b = (b + x/b)/2.0;  
    }  
    return int(b);  // 返回值要求为int,需强制转换
    }
};
利用牛顿迭代法,当两次迭代结果相差不大于0.1时即返回。

猜你喜欢

转载自blog.csdn.net/u011750466/article/details/80060487
今日推荐