我的Leetcode难题Sqrt(x)解决方案有什么问题?

时间:2016-06-25 05:08:32

标签: java sqrt

我正在处理名为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,这是正确的答案。我的代码有什么问题?

2 个答案:

答案 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;
        }