题目链接:LeetCod491
欢迎留言交流,每天都会回消息。
java">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();}}
}