原文:78. 子集(leetcode 解题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-078/

题目:

难度:Middle

相关话题:位运算数组回溯算法

给定一组不含重复元素 的整数数组nums ,返回该数组所有可能的子集(幂集)。

说明: 解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
  [3],
 [1],
 [2],
 [1,2,3],
 [1,3],
 [2,3],
 [1,2],
 []
]

思路:

回溯,由于都是独立的数字,因此只需要每次递归时索引+1

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsets = function(nums) {
  let result=[]
  backtrack(0,[])
  return result

  function backtrack(start,temp){
    result.push(temp.slice())
    for(let i=start;i<nums.length;i++){
      temp.push(nums[i])
      backtrack(i+1,temp)
      temp.pop()
    }
  }
};

扩展阅读: