leetcode_78子集

news/2025/2/8 21:32:22 标签: leetcode, 深度优先, 算法

1. 题意

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

2. 题解

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

2.1 选或不选
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 选哪个
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 二进制枚举
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题解


http://www.niftyadmin.cn/n/5845308.html

相关文章

日本游戏机市场5年来首次陷入萎缩;特斯拉招人推进人形机器人量产;任天堂专利显示Switch2手柄可用作鼠标...| 游戏智眼日报

美团成立“算法顾问委员会” 美团宣布&#xff0c;近日&#xff0c;由外部专家学者组成的算法顾问委员会成立&#xff0c;为美团改进算法提供常态化咨询和指导。每个季度美团将举办算法恳谈会&#xff0c;持续邀请骑手、商家、用户、专家学者和媒体代表等共同参加。美团表示&a…

flutter Selector 使用

在 Flutter 中&#xff0c;Selector 是 provider 包中的一个组件&#xff0c;用于在状态管理中高效地选择和监听特定部分的状态变化。Selector 可以帮助你避免不必要的重建&#xff0c;只在你关心的数据发生变化时才重建 widget。 基本用法 Selector 的基本用法如下&#xff…

pytest-xdist 进行多进程并发测试

在自动化测试中&#xff0c;运行时间过长往往是令人头疼的问题。你是否遇到过执行 Pytest 测试用例时&#xff0c;整个测试流程缓慢得让人抓狂&#xff1f;别担心&#xff0c;pytest-xdist 正是解决这一问题的利器&#xff01;它支持多进程并发执行&#xff0c;能够显著加快测试…

QUIC 与 UDP 关系

QUIC协议是建立在UDP之上的,这意味着QUIC的数据包实际上是通过UDP传输的。QUIC的设计使其能够利用UDP的特性,同时在其上实现更复杂的功能。以下是QUIC如何体现出其基于UDP的特性,以及QUIC头部字段的详细介绍。 QUIC与UDP的关系 UDP封装:QUIC数据包被封装在UDP数据包中进行…

实际时钟(RTC)的介绍

一、RTC介绍 RTC&#xff1a;实时时钟(Real-Time Clock)的缩写&#xff0c;是一种集成电路&#xff0c;通常称为时钟芯片。 应用&#xff1a;广泛应用于消费类电子产品&#xff0c;提供精确的实时时间或为电子系统提供时间基准。 工作原理&#xff1a;采用精度较高…

功能架构元模型

功能架构的元模型是对功能架构进行描述和建模的基础框架,它有助于统一不同团队对系统的理解,并为系统的设计和开发提供一致的标准和规范。虽然具体的元模型可能因不同的应用领域和特定需求而有所差异,但一般来说,功能架构的元模型可以涵盖以下几个方面: 组件/模块元模型:…

游戏引擎学习第90天

查看我们现在的进度 目标是完整地手写一个游戏&#xff0c;而不依赖任何现有的游戏引擎或库。这样做的主要原因是希望能够从头到尾掌握游戏开发的全部流程&#xff0c;确保对系统的每个部分都有清晰的理解。此外&#xff0c;现有的引擎和库往往存在各种设计上的问题&#xff0…

如何轻松将Matlab生成的图表嵌入PowerPoint演示文稿

文章目录 Matlab将生成的图添加PPT中一、Matlab脚本1.添加图片函数2.使用示例 总结 Matlab将生成的图添加PPT中 在许多科学、工程和商业领域&#xff0c;Matlab作为一款强大的数值计算和可视化工具&#xff0c;被广泛应用于数据分析和模型构建。然而&#xff0c;当涉及到分享这…