x的平方根
题目描述:
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
题目分析:
只要找出平方就行,两种典型方法:
1,使用 (int)Math.sqrt(x), 直接 return
2,使用二分法进行 x/mid == mid 的判断
代码展示(已验证):
public class mySqrt
{
public static void main(String[] args) {
int x =5226558; // 随手输入的测试用例
System.out.println(mysqrt1(x));
System.out.println(mysqrt2(x));
}
//第一种方法,这个有点过分 哈哈
static int mysqrt1(int x) {
return (int)Math.sqrt(x); // 强制类型输出
}
//第二种方法
static int mysqrt2(int x) {
// 二分法进行查找
// int low =0, high = x-1; 效率比较低,比较次数太多
int low=0,high = x/2 +1; // 效率会高很多
if(x <= 0)
return 0;
if(x <= 3)
return 1;
while(low <= high)
{
int mid = (low+high)/2;
if(mid == x/mid)
return mid;
else if(mid > x/mid)
high = mid -1;
else
low = mid +1;
}
return high;
}
}
泡泡:
不用这两种方法的话也没问题,根据等差数列的关系进行循环应该也能做出来,效率一般吧。
记着强制类型转换的形式,以后还会用到,然后二分法的话,注意赋值细节。