の順列の総数は見つける:私は、次のプログラムで与えられた文字列の順列の総数を計算しようとしている文字列
プログラム
class Test{
public static void main(String[] args){
String str = "ABC";
int n = str.length();
//System.out.println(permute(str, 0, n-1));
permute(str, 0, n-1);
}
private static int permute(String str, int l, int r){
ArrayList<String> list=new ArrayList<String>();
if (l == r)
//System.out.println(str);
list.add(str);
else
{
for (int i = l; i <= r; i++)
{
str = swap(str,l,i);
permute(str, l+1, r);
str = swap(str,l,i);
}
}
/*for (int i=0;i<list.size() ;i++) {
System.out.println(list.get(i));
}*/
return list.size();
}
public static String swap(String a, int i, int j){
char temp;
char[] charArray = a.toCharArray();
temp = charArray[i] ;
charArray[i] = charArray[j];
charArray[j] = temp;
return String.valueOf(charArray);
}
}
を出力:0
この場合も、指定された文字列の並べ替えを表示するのと同じ方法を適用します。次のプログラムは、私のアプローチを示しています
プログラム
class Test{
public static void main(String[] args){
String str = "ABC";
int n = str.length();
//System.out.println(permute(str, 0, n-1));
permute(str, 0, n-1);
}
private static void permute(String str, int l, int r){
ArrayList<String> list=new ArrayList<String>();
if (l == r)
//System.out.println(str);
list.add(str);
else
{
for (int i = l; i <= r; i++)
{
str = swap(str,l,i);
permute(str, l+1, r);
str = swap(str,l,i);
}
}
for (int i=0;i<list.size() ;i++) {
System.out.println(list.get(i));
}
//return list.size();
}
public static String swap(String a, int i, int j){
char temp;
char[] charArray = a.toCharArray();
temp = charArray[i] ;
charArray[i] = charArray[j];
charArray[j] = temp;
return String.valueOf(charArray);
}
}
出力:
ABC
ACB
BAC
BCA
CBA
CAB
私は0
を得るarraylist
のサイズを返すようにしようとすると、私の疑問は、ここにあります私の出力として、私はlist
のすべての要素を印刷するとき、それはすべての順列を示しています。
誰かが疑いを晴らすことができますか?
これは、permuteメソッドで新しいListオブジェクトを作成するためです。リストをグローバル変数にする。 –
番号を取得するためにすべての順列を生成する必要はないことをご存知ですか? – MBo
助けてくれてありがとう! –