文字列のすべての順列を印刷しようとしています。しかし、私の最善の努力にもかかわらず、私は自分のコードに必要な出力を得ることができません。誰かが私のコードに何が間違っているのか説明できますか?私はこれを何時間も試してきましたが、悲惨に失敗しました。文字列のすべての組み合わせを印刷するのに、バックトラッキングが機能していませんか?
以下のコードのために出力される: -
ABC
これはバックトラックのために並び替える機能である: -
int i, l = 2;
void permute(String str, int n)
{
for(i=n;i<=l;i++)
{
if(n==l)
{
System.out.println(swap(str,n,i));
return;
}
else
permute(swap(str,n,i),n+1);
}
}
これは、上記のコードを実行する主な機能であります: -
public static void main(String args[])
{
BacktrackTest bt=new BacktrackTest();
String c="abc";
bt.permute(c,0);
}
これはスワップのためのコードである: -
String swap(String st, int s1, int s2)
{
char chr[] = st.toCharArray();
char t;
t = chr[s1];
chr[s1] = chr[s2];
chr[s2] = t;
st = String.valueOf(chr);
return st;
}
forループ 'i ++ 'のインクリメント条件は、そうでなければなりませんか?それは 'i - 'ではないでしょうか? – Omoro
nが文字列の開始インデックスになり、lが終了になります。ループはnからlまで実行されます。だから、私は+ + –
私はあなたのコードを試してみて、それはうまく動作している必要があります。それは 'abc acb bac bca cba cab'を各行ごとに独自の行に出力します。実行しているコードがあなたの質問のコードと同じであると確信していますか?編集:私の悪い、コピー貼り付け、私の答えを参照してください私はわずかな変更を加えた。 – walen