我有一个数组:
String wordArr[]=new String[3];
[1 2 3]
我想用上面的所有组合形成数组。
称。,
123 132 213 231 321 312
有人能给我一个关于如何在java中找到所需数组和逻辑的想法吗?
弄清楚如何使用所有可能的组合迭代数组。假如我第一次用123迭代然后下次我应该遍历132和213等等......
答案 0 :(得分:2)
这是用于生成任何数组 a
的排列的伪代码Array permutations(a):
if size(a) == 0 then return [];
else:
Array result;
for i in range(size(a)):
for t in permutations(a.remove(i)):
result.push(Array(a[i]) + t)
return result
希望这是有道理的,我会尝试为此制作java代码,并尽快上传。
答案 1 :(得分:1)
将backtracking应用于排列的实现是很有用的。基本思路是,对于从0到数组长度的索引loc
,枚举arr[loc]
的所有可能选择
我在Java中实现了以下功能,但它可以用任何语言完成。
import java.util.*;
public class PermutationTest{
private static void swap(char[] arr, int i, int j) {
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
private static void permutations(char[] arr, int loc, int len, ArrayList<String> result) {
if (loc == len) {
result.add(new String(arr));
return;
}
// Pick the element to put at arr[loc]
permutations(arr, loc + 1, len, result);
for (int i = loc + 1; i < len; i++) {
// Swap the current arr[loc] to position i
swap(arr, loc, i);
permutations(arr, loc + 1, len, result);
// Restore the status of arr to perform the next pick
swap(arr, loc, i);
}
}
public static ArrayList<String> permutations(String str) {
ArrayList<String> result = new ArrayList<String>();
if (str.length() == 0) { return result; }
permutations(str.toCharArray(), 0, str.length(), result);
return result;
}
public static void main(String []args){
ArrayList<String> result = permutations("123");
for (String str : result) {
System.out.println(str);
}
}
}