2017-04-10 16 views
0

私は今週Javaの割り当てを行います。ここでは、文字列をバックトラックするためにセットを使用し、その文字列のすべての順列を見つけることが期待されています。文字列に含まれる数字。この部分だけで大丈夫です。問題は、この整数の長さをint zに設定すると予想されることです。intの文字列の並べ替え

たとえば、maxDigit( "12345"、3)メソッドの予想される出力は、次のようになります。コードを改善するために必要な箇所を教えてください。

乾杯。

/** 
* Returns the maximum possible integer given the string str containing digits, using 
* maximum of n digits. Each digit in str can only be used once. 
**/ 
static int maxDigit(String str, int z) { 
    Set<Integer> result = new TreeSet<>(); 

    if(str.length() == 0 || z == 0) 
     return -1; 

    permute("",str,result,z); 

    int answer = 0; 
    for(int a : result) { 
     if(a > answer) 
      answer = a; 
    } 
    return answer; 
} 

/** 
* Creates a set of permutations in result based on string str with max n digits. 
**/ 
private static void permute(String acc, String str,Set<Integer> result,int z) { 
    int n = str.length(); 
    if (n == 0) 
     result.add(Integer.parseInt(acc)); 
    else { 
     if(!(z < str.length())) { 
      for (int i = 0; i < n; i++) 
       permute(acc + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n), result, z); 
     } else { 
      for (int i = 0; i < n - 1; i++) 
       permute(acc + str.charAt(i), str.substring(0, i) + str.substring(i + 1, z), result, z); 
     } 
    } 
} 
+0

これはあなたの質問に答えることはできませんが、文字列内の数字を降順でソートして最初の「z」数字を取っても最大の数字にならないことは知っていますか?これはO(nlogn) –

+1

@RicoKhlerです。確かにそうですが、これは特にJavaのバックトラックの知識をテストするために設計されているため、この例ではStringをソートすることは不可能です。 – Neuw

答えて

0

これは動作するようです。あなたのエッジ条件が問題です。

private static void permute(String acc, String str,Set<Integer> result,int z) { 
    int n = str.length(); 
    if (acc.length() == z) 
     result.add(Integer.parseInt(acc)); 
    else { 
     for (int i = 0; i < n; i++) 
      permute(acc + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n), result, z); 

    } 
} 

System.out.println(maxDigit("1234", 2)); 
43 
+0

ありがとうNick。残念ながら、これは、zが文字列のサイズを超える別のエッジ条件では失敗します。 – Neuw

+0

...だからそれを修正して.... –

+0

気にしない、私はちょうど愚かであり、前の方法でそれのためのチェックを実装することを忘れてしまった。 +1! – Neuw

関連する問題