【进阶篇 - Day 36】 2020-12-06 位运算系列(07. 高频面试题 )
题目描述
入选理由
1.考察大家对位运算的灵应用,有的时候解题用位运算这种“奇淫巧计”会有很不错的效果
题目描述
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
我的回答
https://github.com/leetcode-pp/91alg-2/issues/62#issuecomment-739622761
解法一
时空复杂度
时间复杂度:O(n*n^2)
空间复杂度: O(n^2)
*/
var subsets = function (nums) {
let ans = []
for (let i = 0; i < nums.length; i++) {
let length = ans.length
for (let j = 0; j < length; j++) {
let newChild = [...ans[j], nums[i]]
ans.push(newChild)
}
ans.push([nums[i]])
}
ans.push([])
return ans
};解法二
时空复杂度
时间复杂度:O(n* 2^n)
空间复杂度: O(n)
var subsets = function (nums) {
let ans = []
let n = nums.length
for (let i = 0; i < (1 << n); ++i) {
const t = []
for (let j = 0; j < n; ++j) {
if (i & (1 << j)) {
t.push(nums[j])
}
}
ans.push(t)
}
return ans
};