(主要是越界问题)
实现 int sqrt(int x)
函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4 输出: 2
示例 2:
输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
public int mySqrt(int x) { if (x==1) { return 1; } for (int i=0;i<=x/2;i++) { if (i*i == x) { return i; } else if (i*i<x && (i+1)*(i+1)>x) { return i; } } return 1; }
输入 2147483647 输出 1 预期结果 46340
错误原因是数组越界,int最大开根号也就46340.9,从0~46340之间找到n,n的平方小于x,n+1的平方大于x,就好
改成下面这样
public int mySqrt(int x) { if (x==1) { return 1; } for (int i=0;i<=x/2;i++) { if ((long)i*(long)i == x) { return i; } else if ((long)i*(long)i<x && (long)(i+1)*(long)(i+1)>x) { return i; } } return 1; }
成功 执行用时 : 51 ms, 在Sqrt(x)的Java提交中击败了20.67% 的用户 内存消耗 : 32.8 MB, 在Sqrt(x)的Java提交中击败了31.49% 的用户