求集合的所有子集问题

Posted 前端精髓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求集合的所有子集问题相关的知识,希望对你有一定的参考价值。

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
function subsets(nums) 
  let result = []
  result.push([])
  for (const num of nums) 
    let newSubsets = []
    for (const subset of result) 
      let newSubset = subset.slice()
      newSubset.push(num)
      newSubsets.push(newSubset)
    
    result.push(...newSubsets)
  
  return result


console.log(subsets([1,2,3]))

思路

遍历数组,对数组中的每一个整数,每一步都向输出子集中所有子集添加这个整数,并生成新的子集。

开始子集为空,因为空集是任何集合的子集。

[ [] ]

第一步,遍历到 1,之前子集是 [ ],每个子集合都添加整数 1,得到新子集为 [ 1 ],最后结果:

[
  [],       [ 1 ]
]

第二步,遍历到 2,之前子集是 [ ] 和 [ 1 ],每个子集合都添加整数 2,得到新子集为 [ 2 ] 和 [ 1, 2 ],最后结果 :

[
  [],       [ 1 ],
  [ 2 ],    [ 1, 2 ]
]

第二步,遍历到 3,之前子集是 [ ] 、 [ 1 ] 、[ 2 ]、[ 1, 2 ],每个子集合都添加整数 3,得到新子集为 [ 3 ]、[ 1, 3 ]、[ 2, 3 ]、[ 1, 2, 3 ] 最后结果:

[
  [],       [ 1 ],
  [ 2 ],    [ 1, 2 ],
  [ 3 ],    [ 1, 3 ],
  [ 2, 3 ], [ 1, 2, 3 ]
]

注意:要先复制结果中的子集,再把数字添加到子集中形成新的子集。

以上是关于求集合的所有子集问题的主要内容,如果未能解决你的问题,请参考以下文章

求集合的所有子集问题

求集合的所有子集问题

用c语言解决集合中关于子集的问题

Leetcode78. Subsets(求集合的子集问题)

C语言编程 集合子集问题

求子集 递归加回溯