求集合的所有子集问题
前端精髓
共 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 ]
]
注意:要先复制结果中的子集,再把数字添加到子集中形成新的子集。
评论