LeetCode每日一题题解:78. 子集-题解-python && C++源代码

简介: LeetCode每日一题题解:78. 子集-题解-python && C++源代码

订阅专栏

78. 子集


难度中等1536收藏分享切换为英文接收动态反馈


给你一个整数数组 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 中的所有元素 互不相同

题解:


数组有n个数,子集数量则应当为2的n次方个,从0到2的n次方的数,用二进制表示可以发现,他们类似与我们这题要求解的答案

将1的位置设置为有,0的位置设置为没有,

我认为这里是借鉴了0到2的n次方的数不会重复,符合题意的思想,

例如nums = [1 , 2 , 3] ,应有2的3次方,8种子集,这八种为

000 001 010 011 100 101 110 111 即0 1 2 3 4 5 6 7

我们将这8种情况 根据n即数组的长度 依次右位移 0 1 2 次然后与1进行与运算(这样做的目的就是为了找到这8种情况中1的位置)

如001,= [3] 如011 为 [2 , 3] ,我们求1的位置就是为了求我们需要求得的8种数组。


Python代码:

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        ans = []#定义一个里面能放数组的大数组
        for i in range(2**(len(nums))): # //遍历本题的2的n次方个值 。即2的n次方种情
            temp = []    #建立一个空数组用来存放每种情况的值
            for j in range(len(nums)): #因为数组的长度,决定位移的位数,所以这里放置数组的长度求解
                if (i>>j)&1:temp.append(nums[j])  #一位一位的移动,目的是为了求解里面一共有几个1,有1的即为数组某一位数组是否存在的情况
            ans.append(temp)#将每种情况压入堆栈
        return ans

C++代码:

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> ans;  //定义一个里面能放数组的大数组
        int n = nums.size();        //求本题给的数组的长度
        for (int i=0; i<1<<n; i++){    //遍历本题的2的n次方个值 。即2的n次方种情况
            vector<int> res;          //建立一个空数组用来存放每种情况的值
            for (int j=0; j<n; j++){  //因为数组的长度,决定位移的位数,所以这里放置数组的长度求解
                if ((i>>j)&1) res.push_back(nums[j]);  //一位一位的移动,目的是为了求解里面一共有几个1,有1的即为数组某一位数组是否存在的情况
            }
            ans.push_back(res);  //将每种情况压入堆栈
        }
        return ans;
    }
};
相关文章
|
4月前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
350 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
4月前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
131 7
|
2月前
|
算法 Go
🚀 力扣热题 78:子集(详细解析)
✅ 回溯法:经典通用模板,逻辑清晰易扩展。 ✅ 二进制法:简洁高效,适合面试快速写出解法。
125 30
|
4月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
226 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
8月前
|
移动开发 Python Windows
python编程获取网页标题title的几种方法及效果对比(源代码)
python编程获取网页标题title的几种方法及效果对比(源代码)
|
6月前
|
测试技术 开发者 Python
使用Python解析和分析源代码
本文介绍了如何使用Python的`ast`模块解析和分析Python源代码,包括安装准备、解析源代码、分析抽象语法树(AST)等步骤,展示了通过自定义`NodeVisitor`类遍历AST并提取信息的方法,为代码质量提升和自动化工具开发提供基础。
371 9
|
7月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
235 3
python知识点100篇系列(15)-加密python源代码为pyd文件
|
8月前
|
人工智能 算法 图形学
总有一个是你想要的分享40个Python游戏源代码
这是一系列基于Python开发的游戏项目集合,包括中国象棋、麻将、足球、坦克大战、扑克等多种类型游戏,运用了Pygame等库实现图形界面与AI算法。此外还包含迷宫、数独、推箱子等益智游戏及经典游戏如《仙剑奇侠传二战棋版》和《星露谷物语》的Python版本,适合编程学习与娱乐。
560 11
|
8月前
|
关系型数据库 MySQL API
Python管理系统源代码
本文介绍了多种基于Python和相关技术的管理系统源代码,包括学生信息管理、图书管理、ERP、异常管理、考试系统等。提供了64个源代码供下载,适用于不同场景和个人项目需求。下载链接:https://pan.baidu.com/s/1hXPLbKHMpBDhlFVv1kdMxA?pwd=8888,提取码:8888。欢迎使用和支持。
274 3
|
9月前
|
数据可视化 Python
利用Python快速提取字体子集
利用Python快速提取字体子集
78 0