题目描述
分析
通过回溯的方法来完成
每次在扩展 path 之后,回退一位
算法
回溯
过程
通过 set 来去重
通过 dfs 来递归地统计子序列
扩展 path,继续 dfs,然后回退
代码
/**
* @param {number[]} nums
* @return {number[][]}
*/
var findSubsequences = function(nums) {
const n = nums.length
const ret = []
const set = new Set()
const dfs = (start, path) => {
if (path.length >= 2) {
const str = path.toString()
if (!set.has(str)) {
set.add(str)
ret.push(path.slice())
}
}
for (let i = start; i < n; i++) {
const cur = nums[i]
const pre = path[path.length - 1]
if (!path.length || cur >= pre) {
path.push(cur)
dfs(i + 1, path)
path.pop()
}
}
}
dfs(0, [])
return ret
};