赞
踩
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sqrtx
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
此方法比较投机取巧,直接利用内部函数sqrt就可以(笑,并且结果是双一百。
平时我们在做数学题的时候在猜测一个数x的平方根范围是通过查找这么一个数n,它的平方小于或等于x而它加一之后的平方大于x,因此可根据此类想法在写代码,但是运行的速度也不算很好。
此方法利用二分查找,算是方法二的改进,通过二分查找找出n所在的范围,最后确定n。
class Solution {
public:
int mySqrt(int x) {
return sqrt(x);
}
};
class Solution { public: int mySqrt(int x) { int i; for(i=0;i<x;i++){ if(i*i<=x) { if(i==46340) break; else if((i!=46340)&&((i+1)*(i+1)>x)) break; } } return i; } };
值得注意的是这里需要考虑溢出所以i的范围不能超过46340
```cpp class Solution { public: int mySqrt(int x) { int l=0,r=x,m,flag; while(l<=r){ m=(l+r)/2; if((long long)m*m<=x){ flag=m; l=m+1; } else{ r=m-1; } } return flag; } };
这里同样需要注意溢出,因此把m*m改为longlong类型比较,否则会出错
方法一:
(此方法只适用于为了通过而通过(噗 ) )
方法二:
方法三:
后两种都不算最快的方法,后续会继续研究别的方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。