zoukankan      html  css  js  c++  java
  • 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;
    };

  • 相关阅读:
    常见makefile写法
    CMake入门指南
    CMAKE的使用
    Google NewSQL之Spanner
    Google Spanner (中文版)
    全球级的分布式数据库 Google Spanner原理
    idea刷新项目、清除项目缓存
    彻底理解Java的Future模式
    Elasticsearch 三种分页方式
    ElasticSearch 深度分页解决方案
  • 原文地址:https://www.cnblogs.com/lanpang9661/p/13261829.html
Copyright © 2011-2022 走看看