递增子序列 LeetCode 491题|刷题打卡

85 阅读1分钟

题目:

题解

这个和全排列类似,只不过注意添加的时候要判断当前值大于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 春招闯关活动」, 点击查看