[路飞]leetcode- 491.递增子序列

85 阅读1分钟

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。力扣原文

 

示例 1:

输入: 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]]

示例 2:

输入: nums = [4,4,3,2,1]
输出: [[4,4]]

 

解题:

var findSubsequences = function (nums) {
    let result=[],set=new Set(),len=nums.length;
    const defs=(start,list)=>{
        if(list.length>=2){
            const str=list.toString()
            if(!set.has(str)){
                result.push(list.slice())
                set.add(str)
            }
        }
        for(let i=start;i<len;i++){
            const pre=list[list.length-1]
            const cur=nums[i]
            if(list.length==0 || pre<=cur){
                list.push(cur)
                defs(i+1,list)
                list.pop()
            }
        }
    }
    defs(0,[])
    return result
};