给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);
}
}
}