在Java中打印整数数组的所有排列

时间:2015-12-31 14:40:18

标签: java arrays recursion permutation

我刚刚编写了一个代码,用于在Java中的int数组中打印从 1到n 的所有可能的排列,但我认为它比它需要的更复杂。我正在使用Hashset来避免重复。如果有人发现了可以简化的内容,请写下来。

done()

1 个答案:

答案 0 :(得分:0)

我做了这个排列代码,它使用列表作为数据结构。

public List<List<Integer>> permute(int[] numbers) {
// we use a list of lists rather than a list of arrays 
// because lists support adding in the middle
// and track current length
List<List<Integer>> permutations = new ArrayList<List<Integer>>();
// Add an empty list so that the middle for loop runs
permutations.add(new ArrayList<Integer>());

for ( int i = 0; i < numbers.length; i++ ) {
    // create a temporary container to hold the new permutations 
    // while we iterate over the old ones
    List<List<Integer>> current = new ArrayList<List<Integer>>();
    for ( List<Integer> permutation : permutations ) {
        for ( int j = 0, n = permutation.size() + 1; j < n; j++ ) {
            List<Integer> temp = new ArrayList<Integer>(permutation);
            temp.add(j, numbers[i]);
            current.add(temp);
        }
    }
    permutations = new ArrayList<List<Integer>>(current);
}

return permutations;

}