求集合的所有子集问题
前端精髓
共 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 ]
]
注意:要先复制结果中的子集,再把数字添加到子集中形成新的子集。
评论
TinyGLOpenGL 的子集
TinyGL是提供给嵌入式系统或者游戏的非常小的OpenGL子集。TinyGL只实现了OpenGL的主要函数调用。TinyGL最大的特色是快,简单,不完全兼容OpenGL。最特别的是,纹理映射和几何转
TinyGLOpenGL 的子集
0
TOBrowserActivityKitUIActivity 的子集
TOBrowserActivityKit是UIActivity的子集,可以在Chrome或者Safari中打开NSURL对象。
TOBrowserActivityKitUIActivity 的子集
0
TOBrowserActivityKitUIActivity 的子集
TOBrowserActivityKit 是 UIActivity 的子集,可以在 Chrome 或
TOBrowserActivityKitUIActivity 的子集
0
sonar-dotnet-codeanalysisSonarQube规则的子集
sonar-dotnet-codeanalysis是Sonar平台用于分析C#语言代码质量的插件。用于C#的SonarQube代码分析是一个代码分析NuGet包和一个基于.NET编译器平台(“Rosl
sonar-dotnet-codeanalysisSonarQube规则的子集
0