实现 int sqrt(int x)
函数。
计算并返回 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时即返回。