题目链接: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();
}
}
}