所以我使用经典的排列算法
private static void permutation(String prefix, String str) {
int n = str.length();
if (n == 0) System.out.println(prefix);
else {
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
}
}
我唯一无法弄清楚如何将排列存储到数组中而不是仅仅打印出来。任何帮助表示赞赏。
答案 0 :(得分:1)
试试这个方法。这将返回排列列表
private static List<String> permutation(String prefix, String str) {
List<String> permutations = new ArrayList<>();
int n = str.length();
if (n == 0) {
permutations.add(prefix);
}
else {
for (int i = 0; i < n; i++)
permutations.addAll(permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n)));
}
return permutations;
}
使用数组。需要JAVA 8
private static String[] permutation(String prefix, String str) {
String[] permutation = new String[]{};
int n = str.length();
if (n == 0) {
permutation = new String[]{prefix};
}
else {
for (int i = 0; i < n; i++)
permutation = Stream.concat(Arrays.stream(permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n))),
Arrays.stream(permutation)).toArray(String[]::new);
}
return permutation;
}
答案 1 :(得分:0)
您也可以将排列列表的引用传递给置换方法本身。这样做的好处是只创建一个列表。
private static List<String> permutation(String str) {
List<String> perms = new ArrayList<>();
permutation("", str, perms);
return perms;
}
private static void permutation(String prefix, String str, List<String> perms) {
int n = str.length();
if ( n == 0 ) {
perms.add(prefix);
} else {
for ( int i = 0; i < n; i++ )
permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1,n), perms);
}
}
List<String> perms = permutation("abcd");