78-子集

Posted nxnslc-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了78-子集相关的知识,希望对你有一定的参考价值。

N位不重复数的子集是2^N个,这里对子集总数表示采用位运算的方法  。例如1<<3=1*2*2*2=8,故可表示为1<<N

需要注意的点:vector<int> res;      直接这么声明的话没有初始值,内部是空的,就是[]这样的形式,所以后续循环输出的时候才能输出空集

思路:建立1到2^N的循环,循环内每个数(二进制)都和nums内的每个数位(1<<j)进行&位运算,即可将对应的位输入vector中,最终输出一个完整的子集,外部循环完毕就是该nums的所有子集。

这里面没想到的点是位运算的表示,使代码优化,读起来更方便。

技术图片
class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        
        vector<vector<int>> res;
        int result=nums.size();
        int N=1<<result;
        for(int i=0;i<N;i++)
        {
            vector<int> v;
            for(int j=0;j<result;j++)
            {
                if(i&(1<<j))               //计算nums的各位中是否和i对应,如果对应,就把num中对应的位输出
                {
                    v.push_back(nums[j]);
                }
                
            }
            res.push_back(v);
        }
        return res;
    }
};
View Code

 

 

相关知识点链接:

1:https://blog.csdn.net/qq531958586/article/details/82928316

2:https://zhidao.baidu.com/question/169077652.html?qbl=relate_question_2&word=%CE%BB%D4%CB%CB%E31%3C%3C8

以上是关于78-子集的主要内容,如果未能解决你的问题,请参考以下文章

78子集

[leetcode] 78. 子集

[LeetCode] 78. 子集 ☆☆☆(回溯)

78. 子集

精选力扣500题 第61题 LeetCode 78. 子集c++/java详细题解

[算法题解详细]DFS解力扣78子集