赞
踩
实现 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时即返回。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。