78.子集

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;
};

原文地址:https://www.cnblogs.com/lanpang9661/p/13261829.html