2012-03-14 3 views
1

アルファベットのような文字列の順列の特定の組み合わせを取得したいです。私は、私は5番目の要素が必要な場合、私は、リストからそれを取ることができ、うまく私は順列の特定の組み合わせを取得したいですか?

public class PermutationExample { 

public static List<String> getPermutation(String input) { 

    List<String> collection = null; 

    if (input.length() == 1) { 
     collection = new ArrayList<String>(); 
     collection.add(input); 
     return collection; 
    } else { 
     collection = getPermutation(input.substring(1)); 
     Character first = input.charAt(0); 
     List<String> result = new ArrayList<String>(); 
     for (String str : collection) { 
      for (int i = 0; i < str.length(); i++) { 
       String item = str.substring(0, i) + first 
         + str.substring(i); 
       result.add(item); 
      } 
      String item = str.concat(first.toString()); 
      result.add(item); 
     } 
     return result; 
    } 

} 

public static void main(String[] args) { 
    System.out.println(PermutationExample.getPermutation("ABCD")); 

} 
} 

このコードは動作し、私はすべての組み合わせを取得することができます:私を理解するために、私はあなたに私が使用してコードを紹介しますそれを受け取ることができます。しかし、文字列がアルファベットの場合、動作しませんでした、それは大きすぎます。すべての2621から1221のような特定の要素を得るために、私は何をしなければなりません!組み合わせ?

答えて

1

私はずっと前と同様の問題をPythonで解決しました。

必要なものがn番目の順列であれば、必要な順列のみを生成しようと考えると、すべての順列を生成してn番目の値を返すことができます。

あなたは、必要な並べ替えの数の前に何があるべきかを考え、次に要素の残りの部分を再帰的に求める必要があります。

col [n] < col [n + 1] のような任意の値に対して、値の集合[0、...、X]を仮定します。可能な順列、コレクションが完全に逆転する場合。

各(N-1)の後でコレクションの先頭に変更が見られます!置換の場合、n <(N-1)!の場合、頭は頭です。残りの並べ替え数があり、同じ論理を再帰的に適用できます。

これは役に立ちますか?私はそれがかなり高いレベルであることを知っていますし、あなたはそれについて少し考えなければならないかもしれませんが、おそらくそれはあなたを正しい軌道に乗せるでしょう。

+0

はい、私は文字列のN番目の順列が必要ですが、私は問題をどのようにスローするか分からない: – Aleksiev

関連する問題