https://leetcode.com/problems/increasing-subsequences/?tab=Description
找到所有的递增子序列(子序列表示可以不连续,子数组必须连续)
用一个set保存在当前位置已经深搜过的值
public class Solution {
public List<List<Integer>> findSubsequences(int[] nums) {
List<List<Integer>> res = new LinkedList();
List<Integer> part = new LinkedList();
HashSet<Integer> set = new HashSet();
for (int i = 0; i < nums.length ; i++) {
if (set.contains(nums[i])) {
continue;
}
set.add(nums[i]);
part.add(nums[i]);
dfs(nums, res, part, i);
part.remove(part.size() - 1);
}
return res;
}
private void dfs(int[] nums, List<List<Integer>> res, List<Integer> part, int index) {
if (part.size() >= 2) {
res.add(new LinkedList(part));
}
if (index == nums.length - 1) {
return;
}
HashSet<Integer> next = new HashSet();
for (int i = index + 1; i < nums.length; i++) {
if (nums[i] >= nums[index] && !next.contains(nums[i])) {
next.add(nums[i]);
part.add(nums[i]);
dfs(nums, res, part, i);
part.remove(part.size() - 1);
}
}
}
}