n个无序不重复0~9的数字,输出n位的所有可能
例如:输入1,2,3;输出:123, 132, 213, 231, 312, 321
可以使用遍历+递归方式实现,大概思路如图:
private static List<Integer> list = new ArrayList<>();
public static void main(String[] args) {
combination(1,2,3,4);
}
public static void combination(Integer... nums) {
if(null == nums || nums.length == 0) {
System.out.println(Strings.join(list, ','));
return;
}
// 第一层遍历所有数字
for(Integer n:nums) {
list.add(n);
// 去掉当前数字,剩下的数字进入下一层
combination(Arrays.stream(nums).filter(d -> d!= n).toArray(Integer[]::new));
// 回到上一层
list.remove(list.size() - 1);
}
}