Java算法:给n个不相同的数,求出组成的所有n位不相同的数

给n个不相同的数,求出组成的所有n位不相同的数,比如给你1,2,3,4,用来组成4位数,用Java求出所有的4位数。



```java
    public static void main(String... args) {
        //这个看你自己的定义,你要是直接用的字符串数组,就用这个,否则就用下面的,把int数组先转字符串数组
        //List<String> list = Arrays.asList(new String[]{"1","2","3","4"});
        int[]  intArrays = {1,2,3,4};
        String[] strArrays=Arrays.toString(intArrays).split("[\\[\\]]")[1].split(", "); //为何可以百度的事情非要来知乎问呢?
        List<String> list = Arrays.asList(strArrays);
        List<String> list1 = permutationNoRepeat(list, 4);
        System.out.println(list1);

    }
    /***
     * @Description: 任意输入数组输入组成的不重复字符
     * @Param: [list, length]
     * @return: java.util.List<java.lang.String>
     * @Author: lb
     * @Date:2022/3/23 15:21
     */
    public static List<String> permutationNoRepeat(List<String> list, int length) {
        Stream<String> stream = list.stream().distinct();
        for (int n = 1; n < length; n++) {
            stream = stream.flatMap(i -> list.stream().filter(j -> !i.contains(j)).map(j -> i.concat(j)));
        }
        return stream.collect(Collectors.toList());
    }



输出:
[1234, 1243, 1324, 1342, 1423, 1432, 2134, 2143, 2314, 2341, 2413, 2431, 3124, 3142, 3214, 3241, 3412, 3421, 4123, 4132, 4213, 4231, 4312, 4321]

import java.util.*;
class Main{

public static void main(String[] args) {
    int[] a = {1,2,3,4};
    int count = a.length;
    helper(a, count, "");
    for (int i = 0; i < arr.size(); i++) {
        System.out.print(arr.get(i) + " ");
    }
}

private static List<String> arr = new ArrayList<>();
private static void helper(int[] a, int count, String temp) {
    if (temp.length() == count) {
        arr.add(temp);
        return;
    }
    for (int j : a) {
        temp += j;
        helper(a, count, temp);
        temp = temp.substring(0, temp.length() - 1);
    }
}

}