package demo10;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author xianyu
* @version 1.0
* @date 2020/4/24 22:48
* 全排列2
*/
public class Permutation2 {
public static void main(String[] args) {
int[] nums = new int[]{1,1,2};
Arrays.sort(nums); // 排序的目的是为了判断重复数字是否选过
List<List<Integer>> result = permute(nums);
System.out.println(result.toString());
}
public static List<List<Integer>> permute(int[] nums){
List<List<Integer>> res = new ArrayList<>();
boolean[] visited = new boolean[nums.length];
dfs(nums,visited,new ArrayList<>(),res);
return res;
}
public static void dfs(int[] nums,boolean[] visited,List<Integer> inList,List<List<Integer>> res){
if(inList.size() == nums.length){
res.add(new ArrayList<>(inList));
return;
}
for (int i = 0; i < nums.length; i++) {
if(visited[i]) continue;
如果当前数跟前一个数相等,判断前一个数是否选择过,是的话跳过,证明前面已经选过重复的数字了
if(i>0 && nums[i] == nums[i-1] && visited[i - 1])
continue;
inList.add(nums[i]);
visited[i] = true;
dfs(nums,visited,inList,res);
inList.remove(inList.size()-1);
visited[i] = false;
}
}
}
全排列II
最新推荐文章于 2024-08-24 18:06:24 发布