0
点赞
收藏
分享

微信扫一扫

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

鱼板番茄 2022-03-20 阅读 40
leetcode

在这里插入图片描述
这题属于回溯题里面的树层去重的问题.前面的子集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);
        }
    }
}
举报

相关推荐

0 条评论