LintCode 17. 子集 JavaScript算法
程序员文章站
2022-07-15 16:26:58
...
描述
给定一个含不同整数的集合,返回其所有的子集。
说明
子集中的元素排列必须是非降序的,解集必须不包含重复的子集。
样例
- 样例 1:
输入:[0]
输出:
[
[],
[0]
]
- 样例 2:
输入:[1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
挑战
你可以同时用递归与非递归的方式解决么?
解析
这里LintCode平台有bug,有一组数据测试不通过,所以我是用Java提交的
subsets = function (nums) {
if(nums.length===0) return [[]]
let result = []
nums.sort((a, b) => a-b).forEach(item => {
result.forEach(r => { result.push([...r, item]) })
if(result.length===0){
result.push([])
result.push([item])
}
})
return result
}
public class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
Arrays.sort(nums);
Deque<Integer> subset = new ArrayDeque<>(nums.length);
dfs(nums, 0, subset, res);
return res;
}
private void dfs(int[] nums, int k, Deque<Integer> subset, List<List<Integer>> res) {
res.add(new ArrayList<>(subset));
for (int i = k; i < nums.length; ++i) {
subset.addLast(nums[i]);
dfs(nums, i + 1, subset, res);
subset.removeLast();
}
}
}
运行结果
上一篇: Python语言
下一篇: Redis操作命令总结
推荐阅读
-
LintCode 1266. 找不同 JavaScript算法
-
LintCode 41. 最大子数组 JavaScript算法
-
LintCode 767. 翻转数组 JavaScript算法
-
LintCode 1099. 不下降数组 JavaScript算法
-
LintCode 1347. 尾随零 JavaScript算法
-
LintCode 1314. 2的幂 JavaScript算法
-
LintCode 4. 丑数 II JavaScript算法
-
LintCode 34. N皇后问题 II JavaScript算法
-
LintCode 759. 时间角度 JavaScript算法
-
LintCode 517. 丑数 JavaScript算法