AlienGao's blog AlienGao's blog
首页
  • JavaScript
  • Antd组件
  • 学习笔记

    • 《ES6 教程》笔记
  • 贪心
  • 广度优先/深度优先
  • 位运算
  • 技术文档
  • GitHub技巧
面试
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

AlienGao

首页
  • JavaScript
  • Antd组件
  • 学习笔记

    • 《ES6 教程》笔记
  • 贪心
  • 广度优先/深度优先
  • 位运算
  • 技术文档
  • GitHub技巧
面试
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 子集
  • 位运算
AlienGao
2021-08-12

子集

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

解答

左移 shift:x << n 向左移动n位,右边填入0。
从数学角度出发,子集个数为2^n个。因此可以从0 -> 2^n次进行遍历。

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsets = function(nums) {
    let n = nums.length
    let ans = []
    for (let i = 0; i < (1 << n); i++) {
        let t = []
        for (let j = 0; j < n; j++) {
            if (i & (1 << j)) {
                t.push(nums[j])
            }
        }
        ans.push(t)
    }
    return ans
};
编辑 (opens new window)
#位运算
上次更新: 2021/08/12, 23:39:04
最近更新
01
Promise
08-18
02
Vue查漏补缺
08-16
03
筛选组件
08-14
更多文章>
Theme by Vdoing | Copyright © 2021-2021 AlienGao | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×