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天前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
36 6
|
4天前
|
C++
两种解法解决 LeetCode 27. 移除元素【C++】
两种解法解决 LeetCode 27. 移除元素【C++】
|
4天前
|
C++ 计算机视觉 Python
我在Python中丢的面子被我用C++找回来了
我在Python中丢的面子被我用C++找回来了
35 0
|
4天前
|
存储 计算机视觉 异构计算
使用python&C++对bubbliiiing的yolo系列进行opencv.dnn进行推理部署
使用python&C++对bubbliiiing的yolo系列进行opencv.dnn进行推理部署
40 0
|
4天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
4天前
|
人工智能 机器人 C++
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
|
4天前
|
编译器 测试技术 C++
【Python 基础教程 01 全面介绍】 Python编程基础全攻略:一文掌握Python语法精髓,从C/C++ 角度学习Python的差异
【Python 基础教程 01 全面介绍】 Python编程基础全攻略:一文掌握Python语法精髓,从C/C++ 角度学习Python的差异
188 0
|
4天前
|
存储 C++ Python
LabVIEW使用Python MathWorks® MATLAB®软件和C/C++
LabVIEW使用Python MathWorks® MATLAB®软件和C/C++
|
4天前
|
算法
leetcode代码记录(子集
leetcode代码记录(子集
12 0
|
4天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。