Leetcode 全排列问题不含重复和含重复剪枝情况

不重复,直接这样递归就行

class Solution { List> res = new ArrayList<>(); public List> permute(int[] nums) { dfs(nums,0); return res; }public void dfs(int[] nums,int index){ if(index==nums.length){ ArrayList list = new ArrayList<>(); for(int num:nums) list.add(num); res.add(list); } for(int i=index; i

含重复,剪枝叶的时候,需要注意,不是简单的跳过,而是前面出现过,就要跳过。因为swap后,顺序被打乱了
public class Solution { List> res = new ArrayList<>(); public List> permuteUnique(int[] nums) { Arrays.sort(nums); dfs(nums,0); return res; }public void dfs(int[] nums, int index){ if(index == nums.length){ ArrayList list = new ArrayList<>(); for(Integer num:nums) list.add(num); res.add(list); return; } for(int i=index; i

【Leetcode 全排列问题不含重复和含重复剪枝情况】

    推荐阅读