在Java中打印整数数组的所有置换

在Java中打印整数数组的所有置换,java,arrays,recursion,permutation,Java,Arrays,Recursion,Permutation,我刚刚编写了一段代码,用于在Java中打印int数组中从1到n的所有可能排列,但我认为它比需要的更复杂。我使用Hashset来避免重复。如果有人发现一些不能简化的东西,请写下来 import java.util.*; public class ProblemFour { private static int n; private static void printResult(int[] result) { Set<Integer> set = n

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

import java.util.*;

public class ProblemFour {
    private static int n;

    private static void printResult(int[] result) {
        Set<Integer> set = new HashSet<>();
        Integer[] nums = new Integer[result.length];

        for (int i = 1; i <= n; i++) {
            nums[i - 1] = result[i - 1];
        }

        for (Integer num : nums) {
            set.add(num);
        }
        if(set.size() == n) {
            String s = "[ ";
            for (Integer num : nums) {
                s += num + " ";
            }
            System.out.println(s + "] ");
        }
    }

    private static void permute(int[] result, int index) {
        if (index == result.length) {
            printResult(result);
            return;
        }
        for (int i = 1; i <= n; i++) {
            result[index] = i;
            permute(result, index+1);
        }
    }


    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("From 1 to: ");
        n = input.nextInt();

        int[] result = new int[n];

        permute(result, 0);
    }
}
import java.util.*;
公共课问题四{
私有静态int n;
私有静态void打印结果(int[]结果){
Set=newhashset();
整数[]nums=新整数[result.length];

对于(inti=1;i我早就编写了这个排列代码,它使用列表作为数据结构

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;
公共列表排列(int[]数字){
//我们使用列表列表而不是数组列表
//因为列表支持中间添加
//和跟踪电流长度
列表置换=新的ArrayList();
//添加一个空列表,以便运行中间for循环
add(newarraylist());
for(int i=0;i

}

这似乎是为了让我投票结束这个问题,因为这个问题是开放式的,因此不适合这个问答网站。