计算一个数组的子集

简介: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

原题参照:Subset/子集


给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。


解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。


示例 1:


输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]


示例 2:


输入:nums = [0]
输出:[[],[0]]


解题思路


回溯法:确定子集是由长度为0~size个数字组成,所以就分别求对应长度所有的子集的交集,就是最终的子集。重点是一个判断条件temp.size()==0||(temp.size()>0&&temp[temp.size()-1]<nums[i]需要理解透。第一个子条件是确定子集中第一个数字,第二个条件是去除重复,防止出现子集数字重复,如[2,3]和[3,2]的情况。


样例代码,C++


vector<vector<int>> res;
vector<int> temp;
void backTracking(vector<int>& nums,int k){
    if(k==0){
        res.push_back({});
        return ;
    }
    else if(k==nums.size()){
        res.push_back(nums);
        return ;
    }
    if(temp.size()==k){
        res.push_back(temp);
        return ;
    }
    for(int i=0;i<nums.size();i++){
        if(temp.size()==0||(temp.size()>0&&temp[temp.size()-1]<nums[i])){
            temp.push_back(nums[i]);
            backTracking(nums,k);
            temp.pop_back();
        }
    }
}
vector<vector<int>> subsets(vector<int>& nums) {
    for(int i=0;i<=nums.size();i++){
        backTracking(nums,i);
    }
    return res;
}


目录
相关文章
|
存储 安全 API
【嵌入式系统】DMA工作原理与常用函数解析
【嵌入式系统】DMA工作原理与常用函数解析
1146 0
【嵌入式系统】DMA工作原理与常用函数解析
|
人工智能
|
机器学习/深度学习 自然语言处理 监控
|
存储 安全 Unix
基于文件系统的ACL
【8月更文挑战第13天】
244 1
|
传感器 存储 算法
物联网设备的低功耗设计与优化技术
【7月更文挑战第7天】低功耗设计与优化技术是物联网设备广泛应用的关键。通过选择合适的处理器和微控制器、低功耗通信协议、睡眠与唤醒机制以及数据压缩与传输优化策略,可以显著降低物联网设备的功耗,延长其电池寿命,提高系统的可靠性和性能。未来,随着物联网技术的不断发展,低功耗设计与优化技术将持续演进,并在更多领域发挥重要作用。
|
存储 安全 Java
基于Java的企业级身份认证与授权
基于Java的企业级身份认证与授权
|
SQL 安全 数据安全/隐私保护
新兴勒索软件团伙崛起:他们是谁,以及是如何运作的
新兴勒索软件团伙崛起:他们是谁,以及是如何运作的
|
传感器 边缘计算 安全
探索物联网:从概念到实际应用的全面介绍
本篇深入探讨了物联网的基础知识,包括概念、发展历程和应用领域。物联网作为连接物理世界与数字世界的桥梁,通过互联网连接和通信的方式,实现了设备之间的数据交换和智能控制。文章首先介绍了物联网的概念,将其定义为一种通过互联网连接的物理设备和传感器网络,可以实现数据传输和通信。接着,我们回顾了物联网的发展历程,从最早的RFID技术到现代的边缘计算和5G网络的结合,展示了物联网不断演进的趋势。
597 0
|
前端开发 JavaScript Java
课设分享|java web学生信息管理系统
课设分享|java web学生信息管理系统
310 1
|
Go 开发工具 Windows
【GO语言】windows下GO语言环境搭建
【2月更文挑战第1天】windows下GO语言环境搭建
382 0