题目
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。
数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。
示例
输入: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]]
题解
暴力DFS+哈希
时间复杂度;
枚举数组,从k位置开始,继续寻找[k+1,len]区间,找到大于k位置的时next,next进入递归;
使用哈希表保存之前找到的数据,防止答案重复
这,能敲出代码但是表述不出来啊~~~~
代码
const findSubsequences = (nums) => {
const len = nums.length
const set = new Set()
for (let i = 0; i < len; i++) {
helper(i, String(nums[i]))
}
function helper(i, s) {
// i是起点,s是字符串
if (i === len) return
if (set.has(s)) return
set.add(s)
for (let j = i + 1; j < len; j++) {
if (nums[j] >= nums[i]) helper(j, s + ',' + nums[j])
}
}
const result = []
set.forEach((s) => {
const a = s.split(',')
a.length > 1 && result.push(a.map((v) => Number(v)))
})
return result
}