文字列順列の実行方法を調べていたところ、以下の解決策が見つかりました。しかし、使用されているロジックを理解するのに本当に苦労しています。特にこの特定の行。for(final String permutation : Permuatations(subList(head,words)))私が言えることから、作成者はそれ自体で関数「Permutations」を呼び出して、その中で subList 関数を実行しています。誰かがこれをもう少し明確にしてもらえますか? どんなガイダンスでも大歓迎です。
public static void main (String [] args)
{
for(final String s: Permuatations(Arrays.asList("This ","is ","String ")))
{
System.out.println("6. THE FINAL OUTPUT " +s);
}
}
public static List<String> Permuatations(final List<String> words)
{
final List<String> perms = new ArrayList<String>();
if (words.size() == 1)
{
perms.add(words.get(0));
System.out.println("3. permuatations if words " + words);
System.out.println("4. PERMS LIST " + perms);
}
else
{
for(final String head : words)
{
for(final String permutation : Permuatations(subList(head,words)))
{
perms.add(head + permutation);
System.out.println("5 .SubList HEAD " + head + " PERMUATATION " + permutation + " Word Size " + words.size() );
}
}
}
return perms;
}
public static List<String> subList(final String elementToRemove, final List<String> elements)
{
final List<String> subList = new ArrayList<String>();
for(final String s : elements)
{
//System.out.println(" 1. STRING s " + s + " ELEMENTS " + elements);
if(!s.equals(elementToRemove))
{
System.out.println(" 1. STRING S " + s + " ELEMENTS " + elements);
subList.add(s);
System.out.println("2 STRING S " + s + " TO SUBLIST " + subList);
}
}
return subList;
}