其他分享
首页 > 其他分享> > Leetcode 491.递增子序列(回溯) 记录反思

Leetcode 491.递增子序列(回溯) 记录反思

作者:互联网

在这里插入图片描述
这题属于回溯题里面的树层去重的问题.前面的子集II
它属于树枝去重和这题去重方法不一样.

树层去重需要多加一个use数组来记录当前什么元素已经被使用过了,思想类似于 数组哈希表,创建一个数组,如果这个元素已经出现过了,那么就就当数组当前下标位置的元素置为1 ,之后的所有元素在递归前都要判断自己是否已经递归过了

class Solution {
    private List<Integer> path = new ArrayList<>();
    private List<List<Integer>> res = new ArrayList<>();
    public List<List<Integer>> findSubsequences(int[] nums) {
        backtracking(nums,0);
        return res;
    }

    private void backtracking (int[] nums, int start) {
        if (path.size() > 1) {
            res.add(new ArrayList<>(path));
        }

        int[] use = new int[201];
        for (int i = start; i < nums.length; i++) {
            if (!path.isEmpty() && nums[i] < path.get(path.size() - 1) || (use[nums[i] + 100] == 1)) 
                continue;
            use[nums[i] + 100] = 1;
            path.add(nums[i]);
            backtracking(nums, i + 1);
            path.remove(path.size() - 1);
        }
    }
}

标签:use,nums,int,new,Leetcode,private,回溯,path,491
来源: https://blog.csdn.net/weixin_45935610/article/details/123611745