求集合的所有子集问题

给你一个整数数组 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 ]]
注意:要先复制结果中的子集,再把数字添加到子集中形成新的子集。
评论
