LeetCode一刷:回溯演算法-子集
阿新 • • 發佈:2020-09-12
問題描述:
子集
給定一組不含重複元素的整數陣列nums,返回該陣列所有可能的子集(冪集)。
說明:解集不能包含重複的子集。
示例:
輸入: nums = [1,2,3]
輸出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
作者:力扣 (LeetCode)
連結:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xv67o6/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
分析:
畫個草圖:
解法:
var backtrack = function(list, tmpList, nums, start) { const len = nums.length; if(start === len) { return; } for(let i=start; i<len; i++) { tmpList.push(nums[i]); list.push([...tmpList]); for(let j=i+1;j<len;j++) { tmpList.push(nums[j]); list.push([...tmpList]); backtrack(list, tmpList, nums, j+1); tmpList.pop(); } tmpList.pop(); } }; /** * @param {number[]} nums * @return {number[][]} */ var subsets = function(nums) { var len = nums.length; if(len === 0) return [[]]; var list = [[]]; backtrack(list, [], nums, 0); return list; };
改進版:
varbacktrack = function(list, tmpList, nums) { const len = nums.length; if(0 === len) { return; } for(let i=0; i<len; i++) { tmpList.push(nums[i]); list.push([...tmpList]); backtrack(list, tmpList, nums.slice(i+1)); tmpList.pop(); } }; /** * @param {number[]} nums * @return {number[][]} */ var subsets = function(nums) { var len = nums.length; if(len === 0) return [[]]; var list = [[]]; backtrack(list, [], nums); return list; };