自学内容网 自学内容网

LeetCode 491-非递减子序列

题目链接:LeetCod491

欢迎留言交流,每天都会回消息。

class Solution {
    //最终返回结果
    List<List<Integer>> rs = new ArrayList<>();
    //递归路径中的值
    LinkedList<Integer> path = new LinkedList<>();
    public List<List<Integer>> findSubsequences(int[] nums) {
        backTracking(nums, 0);
        return rs;
    }

    void backTracking(int[] nums, int startIdx){
        //返回的集合元素的值的大小大于2,添加到结果集合中
        if(path.size() >= 2){
            rs.add(new ArrayList<>(path));
        }
        //用于去除重复的操作
        HashSet<Integer> set = new HashSet<>();
        for(int i = startIdx; i < nums.length; i++){
            //加入的值不是递增的序列或者加入的值已经存在的时候直接下一次循环(主要用于同一层中,不同层不适用)
            if(!path.isEmpty() && nums[i] < path.get(path.size() - 1) || set.contains(nums[i]))
                continue;
            //将加入的值存到set集合中
            set.add(nums[i]);
            path.add(nums[i]);
            //递归
            backTracking(nums, i + 1);
            //回溯
            path.removeLast();
        }
    }
}

原文地址:https://blog.csdn.net/qq_45801839/article/details/143807868

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!