- 递增子序列
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。
数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。
class Solution {
LinkedList<Integer> path = new LinkedList<>();
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> findSubsequences(int[] nums) {
backTrack(nums, 0);
return result;
}
public void backTrack(int[] nums, int startIndex) {
HashSet<Integer> hs = new HashSet<>();//记录数层上的数据是否用已经被用过,需要在for循环外面定义
if (path.size() > 1) result.add(new ArrayList<>(path));//注意判断条件是path.size()[链表]大于1
for(int i = startIndex; i < nums.length; i++) {//数组使用length计算长度,用于保证不越界
if((!path.isEmpty() && path.getLast() > nums[i]) || hs.contains(nums[i])) {
continue;//路径path不为空,才进行path最后一个元素与当前元素的比较
}
path.add(nums[i]);
hs.add(nums[i]);//将当前元素加入到hashset中,用于记录已经出现过的数据
backTrack(nums, i + 1);
path.removeLast();
}
}
}