しゅつりょくぜんはいち
1350 ワード
本論文では,遡及法を用いて全配列を実現するプログラムを与える.
ABCD
ABDC
ACBD
ACDB
ADCB
ADBC
BACD
BADC
BCAD
BCDA
BDCA
BDAC
CBAD
CBDA
CABD
CADB
CDAB
CDBA
DBCA
DBAC
DCBA
DCAB
DACB
DABC
public class Permutations {
public void permute(String value, int startIndex, int endIndex) {
if (startIndex == endIndex) {
System.out.printf("%s
", value);
} else {
for (int currIndex = startIndex; currIndex <= endIndex; currIndex++) {
value = swap(value, startIndex, currIndex);
permute(value, startIndex + 1, endIndex);
/** */
value = swap(value, startIndex, currIndex);
}
}
}
private String swap(String value, int idxOne, int idxTwo) {
char[] charArray = value.toCharArray();
char temp = value.charAt(idxOne);
charArray[idxOne] = charArray[idxTwo];
charArray[idxTwo] = temp;
return new String(charArray);
}
}
テスト手順は次のとおりです.public class Main {
public static void main(String[] args) {
String value = "ABCD";
new Permutations().permute(value, 0, value.length()-1);
}
}
実行結果:ABCD
ABDC
ACBD
ACDB
ADCB
ADBC
BACD
BADC
BCAD
BCDA
BDCA
BDAC
CBAD
CBDA
CABD
CADB
CDAB
CDBA
DBCA
DBAC
DCBA
DCAB
DACB
DABC