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

 

你可能感兴趣的:(算法)