题目:
题解
这个和全排列类似,只不过注意添加的时候要判断当前值大于temp数组中最后一个值。先拿第一个值,递归下一层去拿第二个值,当发现满足下一个值大于等于当前值就往结果集中放,最少两个元素所以temp长度大于2的时候ans.add()
代码
public List<List<Integer>> findSubsequences(int[] nums) {
Set<List<Integer>> ans = new HashSet<>();
List<Integer> temp = new ArrayList<>();
dfs(ans, temp, 0, nums);
return new ArrayList<>(ans);
}
private void dfs(Set<List<Integer>> ans, List<Integer> temp, int index, int[] nums) {
if (temp.size() >= 2) {
ans.add(new ArrayList<>(temp));
}
for (int i = index; i < nums.length; i++) {
if (temp.size() == 0 || temp.get(temp.size() - 1) <= nums[i]) {
temp.add(nums[i]);
dfs(ans, temp, i + 1, nums);
temp.remove(temp.size() - 1);
}
}
}
备注
本文正在参与「掘金 2021 春招闯关活动」, 点击查看。