力扣之491. 递增子序列

给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。

示例:

输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7],
[6, 7, 7], [7,7], [4,7,7]]

说明:

	给定数组的长度不会超过15。
	数组中的整数范围是 [-100,100]。
	给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var findSubsequences = function (nums) {
    const result = [];
    const set = new Set();
    let j = 0;
    const dfs = (start, path) => {
        if (path.length >= 2) { // 使用set去重,并将结果记录
            let setKey = path.join(',');
            if (!set.has(setKey)) {
                result.push(path.slice());
                set.add(setKey);
            }
        }
        for (let i = start; i < nums.length; i++) { // 遍历数组得到所有的子序列
            if (path.length == 0 || path[path.length - 1] <= nums[i]) {
                path.push(nums[i]);
                dfs(i + 1, path);
                path.pop();
            }
        }
    };
    dfs(0, []);
    return result;
};

要得到数组中的所有子序列,需要执行2^n次循环

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页