- 题目
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。
- 示例
输入:nums = [4,6,7,7]
输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]
- 代码
class Solution {
List<List<Integer>> res = new ArrayList<>();
List<Integer> cur = new ArrayList<>();
public void dfs(int[] nums, int index) {
int size = cur.size();
if (size >= 2) {
res.add(new ArrayList<>(cur));
}
int n = nums.length;
HashSet<Integer> set = new HashSet<>();
for (int i = index; i < n; i++) {
if (!set.contains(nums[i]) && (size == 0|| nums[i] >= cur.get(size - 1) )) {
cur.add(nums[i]);
set.add(nums[i]);
dfs(nums, i + 1);
cur.remove(size);
}
}
}
public List<List<Integer>> findSubsequences(int[] nums) {
dfs(nums, 0 );
return res;
}
}