【LeetCode热题100】【回溯】子集

题目链接:78. 子集 - 力扣(LeetCode)

要找所有的子集

方法一:二进制状态法

子集就是对于每个元素来说,要么选它要么不选它,用0和1来表示,n个元素就有2的n次方个状态

可以从0数到2的n次方减一,左移再和1做与运算取它对应的位看看是不是1,是1就加上去

复制代码
class Solution {
public:
    vector<vector<int> > ans;

    vector<vector<int> > subsets(vector<int> &nums) {
        int n = nums.size();
        for (int binary = 0; binary < 1 << n; ++binary) {
            vector<int> son;
            for (int i = 0; i < n; i++) {
                if (binary >> i & i)
                    son.push_back(nums[i]);
            }
            ans.push_back(std::move(son));
        }
        return ans;
    }
};

方法二:递归

对于一个子集来说,这个元素它要么不选,是一个子集,要么选,也是一个子集

复制代码
class Solution {
public:
    vector<vector<int> > ans;
    vector<int> nums;
    vector<int> array;

    void dfs(int depth) {
        if (depth == nums.size()) {
            ans.push_back(array);
            return;
        }
        array.push_back(nums[depth]);
        dfs(depth + 1);
        array.pop_back();
        dfs(depth + 1);
    }

    vector<vector<int> > subsets(vector<int> &nums) {
        this->nums = nums;
        dfs(0);
        return ans;
    }
};
相关推荐
啊阿狸不会拉杆5 分钟前
数据结构-排序
java·c语言·数据结构·c++·python·算法·排序算法
姜行运9 分钟前
数据结构【树和二叉树】
android·数据结构·算法·c#
敢敢のwings12 分钟前
相机雷达外参标定算法调研
数码相机·算法
User_芊芊君子38 分钟前
【C语言经典算法实战】:从“移动距离”问题看矩阵坐标计算
c语言·算法·矩阵
wolf犭良2 小时前
37、aiomysql实操习题
开发语言·python·算法
xin007hoyo2 小时前
算法笔记.spfa算法(bellman-ford算法的改进)
数据结构·笔记·算法
向哆哆2 小时前
Java 加密与解密:从算法到应用的全面解析
java·开发语言·算法
uhakadotcom2 小时前
刚发布的PyTorch 2.7提供了什么 新特性
算法·面试·github
新生农民3 小时前
30分钟解决8道算法题
java·数据结构·算法
bbc1212263 小时前
2025/4/23 心得
数据结构·算法