Open
Description
/**
* @param {number[]} nums
* @return {number[][]}
*/
//
let res = [], sub = [];
function backtracking(nums, startIndex){
if(sub.length >= 2){
res.push([...sub]);
// 注意这里不要加return,因为要取树上的所有节点
}
// used 是记录本层元素是否重复使用,新的一层used都会重新定义(清空),所以要知道used只负责本层!
let used = new Array(201).fill(0);
for(let i = startIndex; i < nums.length; i++){
if(sub.length != 0 && nums[i] < sub[sub.length - 1]) continue; // 这里使用数组来进行去重操作,题目说数值范围[-100, 100]
if(used[nums[i] + 100] == 1) continue; // 记录这个元素在本层用过了,本层后面不能再用了
used[nums[i] + 100] = 1; // 去重效果,因为7+100 和7+100冲突
sub.push(nums[i]);
backtracking(nums, i + 1);
sub.pop();
}
}
var findSubsequences = function(nums) {
res = [];
used = new Array(nums.length).fill(false);
backtracking(nums, 0);
return res;
};