2020-07-07
子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
说明:解集不能包含重复的子集。
题解:
思路1:递归+回溯
var subsets = function (nums) { let n = nums.length; let res = []; // 结果数组 // 这里的tmpPath是前一次的子集 往该子集插入新的元素 生成新的子集 // start 是前一次子集的长度 也是当前要求集合的长度-1 let backtrack = (tmpPath, start) => { res.push(tmpPath); // 每次进入函数 把当前tmp放入到结果res中 for (let i = start; i < n; i++) { // 根据start确定 下一个要放入tmpPath中的是哪一项 // 例如 当tmpPath = [1,2] 时, start = 2 则要从 nums的下标为2的项开始 也就是3 放入tmp中 // 形成下一次递归用的tmp=[123], start+1 // 递归backtrack 把[123]放入res中 start=3 for循环中找到的是第三项也就是4 形成[1234] 再递归 // 递归将[1234]放入res中 递归结束 删掉4 退回上一次递归 // 3处理完 把3删掉 i++从2 => 3 这次要放入的是4形成[124]。。。 tmpPath.push(nums[i]); backtrack(tmpPath.slice(), i + 1); tmpPath.pop(); } } backtrack([], 0); return res; };