LeetCode78. 子集(2024秋季每日一题 58)

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

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

输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

输入:nums = [0]

输出:[[],[0]]

提示:

1 < = n u m s . l e n g t h < = 10 1 <= nums.length <= 10 1<=nums.length<=10
− 10 < = n u m s [ i ] < = 10 -10 <= nums[i] <= 10 −10<=nums[i]<=10
nums 中的所有元素 互不相同


思路:

  • 用二进制枚举每一位 选/或者不选(对应原数组的下标)
  • 将二进制中为 1 的位置对应的元素放入到子集数组中
  • 将所有的子集数组加入最终的答案数组返回即可
cpp 复制代码
class Solution {
public:
    vector<vector<int>> res;
    set<vector<int>> ans;
    vector<vector<int>> subsets(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0; i < (1 << n); i++){
            vector<int> v;
            for(int j = 0; j < n; j++)
                if(i >> j & 1)
                    v.push_back(nums[j]);
            res.push_back(v);
        }
        return res;   
    }
};
相关推荐
Alfred king3 天前
面试150 搜索二维矩阵
线性代数·矩阵·二分查找·数组
Alfred king3 天前
面试150 IPO
面试·职场和发展·贪心·数组··排序
Alfred king4 天前
面试150 建立四叉树
矩阵··数组·分治
yi.Ist5 天前
关于二进制的规律
算法·二进制·bitset
Alfred king6 天前
面试150 环形子数组的最大和
面试·职场和发展·数组·队列·分治
qqxhb7 天前
零基础数据结构与算法——第五章:高级算法-回溯算法&子集&全排列问题
算法·回溯算法·全排列·n皇后·子集
一只小蒟蒻8 天前
DFS 迷宫问题 难度:★★★★☆
算法·深度优先·dfs·最短路·迷宫问题·找过程
Alfred king25 天前
面试150 生命游戏
leetcode·游戏·面试·数组
9527过了头1 个月前
C. Bertown Subway
算法·dfs·
工一木子1 个月前
二进制与生活:从数字世界到人生哲理
二进制