跳到主要内容

78.子集

链接:78.子集
难度:Medium
标签:位运算、数组、回溯
简介:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

题解 1 - typescript

  • 编辑时间:2020-09-20
  • 执行用时:84ms
  • 内存消耗:39.6MB
  • 编程语言:typescript
  • 解法介绍:递归,利用二进制进行去重。
function subsets(nums: number[]): number[][] {
const ans: number[][] = [];
const len = nums.length;
for (let i = 0; i < 1 << len; i++) ans.push(getArr(i));
return ans;
function getArr(num: number): number[] {
const arr: number[] = [];
for (let i = 0; i < len; ++i) num & (1 << i) && arr.push(nums[i]);
return arr;
}
}

题解 2 - typescript

  • 编辑时间:2021-08-14
  • 执行用时:80ms
  • 内存消耗:39.9MB
  • 编程语言:typescript
  • 解法介绍:二进制逐位判断。
function subsets(nums: number[]): number[][] {
const n = nums.length;
const ans: number[][] = [];
for (let i = 0; i < 1 << n; i++) add(i);
return ans;
function add(num: number) {
const arr: number[] = [];
ans.push(arr);
for (let i = 0; i < n; i++) {
if (num & (1 << i)) arr.push(nums[i]);
}
}
}