求集合的所有子集问题

前端精髓

共 1029字,需浏览 3分钟

 ·

2022-01-11 22:31


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


示例:

输入: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 ]]


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


浏览 22
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报