我正在尝试获取一些置换,以后将用它们来蛮力邻接矩阵。下面的代码可能无效,但是可以工作。我想将所有输出的排列添加到数组中。我正在努力做到这一点。有人可以帮忙吗?
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Enter num: ");
int num = in.nextInt();
String str = "";
for (int i=0; i < num; i++){
String temp = Integer.toString(i);
str += temp;
}
int n = str.length();
Permutation permutation = new Permutation();
permutation.permute(str, 0, n-1);
}
}
class Permutation {
public void permute(String str, int l, int r){
if (l == r) {
System.out.println(str);
}
else{
for (int i = l; i <= r; i++){
str = swap(str,l,i);
permute(str, l+1, r);
str = swap(str,l,i);
}
}
}
public String swap(String a, int i, int j) {
char temp;
char[] charArray = a.toCharArray();
temp = charArray[i] ;
charArray[i] = charArray[j];
charArray[j] = temp;
String perm = String.valueOf(charArray);
return perm;
}
}
最佳答案
而不是打印,而是将它们存储在列表中。在这里,我使用了LinkedList
。
class Permutation {
static LinkedList<String> output= new LinkedList<>(); //<---for storing result
public void permute(String str, int l, int r){
if (l == r) {
// System.out.println(str);
output.addLast(str); //<----store it in the linkedlist
}
else{
for (int i = l; i <= r; i++){
str = swap(str,l,i);
permute(str, l+1, r);
str = swap(str,l,i);
}
}
}
之后,您可以从Main打印结果。
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
.....
code
....
permutation.permute(str, 0, n-1);
System.out.println(Permutation.output); //<----print the result
}
}