LeetCode 491-非递减子序列

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(); } } }
上一篇:什么是 C++ 中的常量表达式? 有什么用途?如何判断一个表达式是否是常量表达式?