我正在处理名为sqrt(x)(https://leetcode.com/problems/sqrtx/)的LeetCode第69号问题。它让我在另一个整数中返回整数的平方根。以下是我的解决方案。
public class Solution {
public int mySqrt(int x) {
int i = 0;
if(x==0)
{
return 0;
}
for(i = 1;i<x/2;i++)
{
if(((i*i)<=x)&&((i+1)*(i+1)>x))
{
break;
}
}
return i;
}
}
提交代码后,x&gt; = 2147395600的所有测试用例都失败了。当x = 2147395600时,它返回289398而不是46340,这是正确的答案。我的代码有什么问题?
答案 0 :(得分:1)
而不是int,请使用long。这是因为int只能达到2147395600,而长期远高于此值。但是,费用是您必须转换为long,然后再转换为int。
答案 1 :(得分:-1)
您可以尝试我的代码:
public int mySqrt(int x) {
long i = 0;
long j = x;
int mid = 0;
if (x == 0) {
return 0;
}
if (x == 1) {
return 1;
}
while (i <= j) {
mid = (int)(i + j)/2;
if (x/mid == mid) {
return (int)mid;
} else if (x/mid > mid) {
i = mid + 1;
} else if (x/mid < mid) {
j = mid - 1;
}
}
return (int)j;
}