491. 递增子序列
分析:
依然是一个“树层去重,树枝不去重”的题目,但是相比于90题,其减枝完全依赖对状态的记录,不能直接通过先排序的方式简化,因此难度更高一点。
function findSubsequences(nums: number[]): number[][] {
const result: number[][] = [];
const backtracking = (startIndex: number, nums: number[], curPath: number[]) => {
const usedSet = new Set();
if(curPath.length>=2) {
result.push([...curPath]);
}
for(let i=startIndex;i<nums.length;i++) {
if((curPath.length===0 || nums[i] >= curPath[curPath.length-1]) && !usedSet.has(nums[i])) {
curPath.push(nums[i]);
backtracking(i+1, nums, curPath);
curPath.pop();
}
usedSet.add(nums[i]);
}
};
backtracking(0, nums, []);
return result;
};
console.log(findSubsequences([4,6,7,7]));
console.log(findSubsequences([4,4,3,2,1]));