2016-06-25 9 views
-1

私は、sqrt(x)(https://leetcode.com/problems/sqrtx/)という名前のLeetCode質問番号69に取り組んでいます。整数の平方根を別の整数で返すように私に求めました。以下は私の解決策です。はLeetcodeパズルSQRT(x)のための私の解決策の何が悪いのでしょうか?

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> = 2147395600のすべてのテストケースがすべて失敗します。 x = 2147395600の場合、46340の代わりに289398が返されますが、これは正解です。私のコードの問題は何ですか?

+0

Ummm .... 'int'vs' long'? –

+0

iとxをlongに変換する – Mukit09

答えて

-2

あなたは私のコードを試すことができます。

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; 
     } 
0

intの代わりに、長く使用しています。これはintが2147395600までしか上がらないためですが、それよりもはるかに長くなります。しかし、あなたはlongに変換してからintに戻らなければならないということです。

関連する問題