leetcode_78子集

1. 题意

给定一个不含有重复数字的数列,求所有的子集。

2. 题解

子集型回溯,可以直接用dfs进行搜索;也可以用二进制来进行枚举。

2.1 选或不选
c 复制代码
class Solution {
public:
    void dfs(vector<vector<int>> &ans,vector<int> &tmp,
             vector<int> &nums, int depth) {
        if (depth == nums.size()) {
            ans.emplace_back(tmp );
            return;
        }

            dfs(ans, tmp, nums, depth + 1);
            tmp.push_back(nums[depth]);
            dfs(ans, tmp, nums, depth + 1);
            tmp.pop_back();
    }


    vector<vector<int>> subsets(vector<int>& nums) {
        
        vector<vector<int>> ans;
        vector<int> tmp;
        dfs( ans, tmp, nums, 0);
        return ans;
    }
};
2.2 选哪个
cpp 复制代码
class Solution {
public:
    void dfs(vector<vector<int>> &ans,vector<int> &tmp,
             vector<int> &nums, int depth) {
        
        ans.emplace_back(tmp);
        for (int i = depth;i < nums.size(); i++) {
            tmp.push_back(nums[i]);
            dfs(ans, tmp, nums, i + 1);
            tmp.pop_back();
        }
    }


    vector<vector<int>> subsets(vector<int>& nums) {
        
        vector<vector<int>> ans;
        vector<int> tmp;
        dfs( ans, tmp, nums, 0);
        return ans;
    }
};
2.3 二进制枚举
cpp 复制代码
class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        
        vector<vector<int>> ans;
        int sz = nums.size();

        for (int i = 0;i < (1 << sz); i++) {
            vector<int> tmp;
            for (int j = 0;j < sz;j++) {
                if (i & (1 << j))
                    tmp.push_back(nums[j]);
            }
            ans.emplace_back( tmp );
        }

        return ans;
    }
};

参考

0x3f题解

相关推荐
澄岚明雪1 小时前
力扣经典题目之14. 最长公共前缀
算法·leetcode·职场和发展
muxue1781 小时前
python:递归函数与lambda函数
开发语言·python·算法
終不似少年遊*1 小时前
排序算法3
python·算法·排序算法
qy发大财1 小时前
组合(力扣77)
数据结构·算法·leetcode·职场和发展
源代码•宸2 小时前
Leetcode—734. 句子相似性【简单】Plus
c++·经验分享·算法·leetcode·哈希算法
No0d1es2 小时前
202412 青少年软件编程等级考试C/C++ 二级真题答案及解析
c语言·开发语言·c++·算法·青少年编程·电子学会·二级
执着的小火车3 小时前
【2024华为OD-E卷-100分-日志排序】((题目+思路+Java&C++&Python解析)
数据结构·算法·华为od·华为
源代码•宸3 小时前
Leetcode—487. 最大连续1的个数 II【中等】Plus
c++·经验分享·算法·leetcode·滑动窗口
又在吃鱼3 小时前
DeepseekR1 满血版腾讯云限免
人工智能·算法
A Runner for leave5 小时前
新数据结构(1)冒泡排序和堆排序
数据结构·算法·排序算法