Java&LeetCode 初入门——069. x 的平方根

Java&LeetCode 初入门——069. x 的平方根

文内代码全部采用JAVA语言。

题目

实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

测试用例

示例 1:

输入: 4
输出: 2

示例 2:

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

个人解法

数学上的手动求解平方根用的是二分法。二分法比较简单,直接上代码。范围从左右两边往中间收缩。左边起始i=0,右边起始位j=x,每次检查中间值(i+j)/2的平方,和x进行比较。1实在是放不进去,就单独处理了。
执行用时: 25 ms, 在Sqrt(x)的Java提交中击败了86.16% 的用户。尚可。
注意为了防止从溢出,中间值的平方应该设为long形,反正用int百分百要溢出。

class Solution {
    public int mySqrt(int x) {
		int i=0;
		int j=x;
		if (x==1) {
			return 1;
		}
		while (i+1<j) {
			long temp=(i+j)/2;
			if (x<(temp*temp)) {
				j=(int)temp;
			}else if (x>=temp*temp) {
				i=(int)temp;
			}
		}
		return i;
	}
}

也有简单粗暴的求法,就是从0开始遍历,满足目标x就输出,不过速度就慢多了。大概要81 ms。

class Solution {
    public int mySqrt(int x) {
		int ans = 0;
		for (long i = 0; i <= x; i++) {
			if (i*i<=x && (i+1)*(i+1)>x) {
				ans=(int)i;
				break;
			}
		}
		return ans;
	}
}

评论区解法

评论区很多就直接调用math.sqrt();虽然很快但是不符合题目的要求。
二分法应该是最优解法了,至于如何把代码写的又简洁,运行速度又快,就需要进一步学习了。

猜你喜欢

转载自blog.csdn.net/qq_27480345/article/details/86315926