0
点赞
收藏
分享

微信扫一扫

回溯下标重复与值重复记录

今天你读书了吗 2022-03-30 阅读 105
java
class Solution {


    List<List<Integer>> result = new ArrayList<List<Integer>>();
    List<Integer> temp = new ArrayList<>();
    boolean[] used;//记录下标重复
    
    public void back(int[] nums){
        if(temp.size()==nums.length){
            result.add(new ArrayList<>(temp));
            return;
        }
        int[] values = new int[21];//记录值重复
        for(int i=0;i<nums.length;i++){
            if(values[nums[i]+10]==1 || used[i]){
                continue;
            }
            values[nums[i]+10] = 1;
            used[i]=true;
            temp.add(nums[i]);
            back(nums);
            used[i]=false;
            temp.remove(temp.size()-1);
        }
    }
    public List<List<Integer>> permuteUnique(int[] nums) {
        Arrays.sort(nums);
        used = new boolean[nums.length];
        back(nums);
        return result;
    }
}

 

 

当遇到组合要避免值重复时,使用values内部数组值记录 ,当遇到全排列防止下标重复时用used外部数组记录。

举报

相关推荐

0 条评论