私はjavaで単語解読をしています。今私は、3文字以上の単語(繰り返しなし)から選択された3文字のすべての並び替えを印刷できるプログラムを持っています。入れ子にされたForループの変数番号
[[ABC、ABD、ACB、ACD、ADB、ADC、BAC、悪い、BCA、BCD、BDA、BDC、タクシー、CAD:パラメータはABCDであれば、たとえば、これを印刷しますdac、dba、dbc、dca、dcb]]
私は2次元配列のリストを順列で埋めています。現在、2D配列には3つの文字の順列が含まれている配列が1つしかありません。私は、2D配列に、1文字、2文字、3文字などのように、単語の長さで停止する配列を持たせたい。問題は、これを達成するためにネストされたforループの可変数が必要なことです。 3文字の置換の場合、私は3つのforループを持っています。それぞれがパラメータの文字を循環します。
public static void printAllPermuations(String word)
{
int len = word.length();
ArrayList<String> lets = new ArrayList<String>();
//this array of letters allows for easier access
//so I don't have to keep substringing
for (int i = 0; i < len; i++)
{
lets.add(word.substring(i, i + 1));
}
ArrayList<ArrayList<String>> newWords = new ArrayList<ArrayList<String>>();
newWords.add(new ArrayList<String>());
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
{
for (int k = 0; k < len; k++)
{
if (i != j && i != k && j != k)
//prevents repeats by making sure all indices are different
{
newWords.get(0).add(lets.get(i) + lets.get(j) + lets.get(k));
}
}
}
}
System.out.println(newWords);
}
私は他の投稿を見てきましたが、私は再帰がこれを解決できると聞いてきました。私はそれをどのように実装するのか分かりません。私は理解していない複雑な解決策もいくつか見てきました。私は、再帰を含むかどうかに関わらず、の最も簡単な解決策を要求しています。
if(i!= j && i!= k && j!= k)これはそうです間違いです。loopFunction()内にjとkのローカル変数がありません – Algorithmist
Woopsは少しコピー/貼り付けがうまくできました。また、テール再帰の最適化(Java 8の場合)、またはもう少しレベルを下げるべきか? – DrYap
あなたは 'newWords.get(...)。add(...);'というコードを書いています。add()の部分では、文字の集合が必要です。私はすべての手紙を集める方法を知らない。誰もそれで私を助けることができますか? – Muuz