算法题每日一练---第52天:位运算求解子集

简介: 给你一个整数数组 nums ,数组中的元素 互不相同 。

3.png

一、问题描述


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

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


题目链接:位运算求解子集


二、题目要求


样例 1

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


样例 2

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


考察

位运算中等题型
建议用时20~35min


三、问题分析


本题是位运算的第7题,没了解过位运算相关知识点可以看这一篇文章,讲解比较详细:

算法题每日一练---第45天:位运算,不然下面的操作会显得很迷惑。


子集和位运算有什么关系,3个不同整数构成的最大子集为2^3,二进制也就是111。

以1 2 3的子集为例:

序号 子集 二进制
0 空集 000
1 1 001
2 2 010
3 1,2 011
4 3 100
5 1,3 101
6 2,3 110
7 1,2,3 111

看了上面的表格,是不是感觉子集都有一个不同的二进制数字对应啊!

那不就好办吗?两重循环判断就可以搞定:


第一重 for 循环

要有的二进制类型,从第一个依次向最后一个递进,最小的就是0,最大的为(1<


第二重 for 循环

这个要判断当前的数字是不是属于相关的二进制数组,j从0~n开始计算。

i&(1<


四、编码实现


classSolution {
public:
vector<vector<int>>subsets(vector<int>&nums) {
inti,j,n=nums.size();
vector<int>t;//数组定义vector<vector<int>>ans;//数组定义for(i=0;i<(1<<n);i++)//二进制组合匹配        {
t.clear();//清空tfor(j=0;j<n;j++)//数字判断if(i&(1<<j))
                {
t.push_back(nums[j]);//属于当前数组                }
            }
ans.push_back(t);
        }
returnans;//输出结果    }
};

五、测试结果2.png


相关文章
|
算法
算法思想总结:位运算
算法思想总结:位运算
183 1
|
12月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
523 1
|
算法
【算法】位运算算法——消失的两个数字(困难)
【算法】位运算算法——消失的两个数字(困难)
|
算法
【算法】位运算算法——只出现一次的数字Ⅱ
【算法】位运算算法——只出现一次的数字Ⅱ
|
算法
【算法】位运算算法——判断字符是否唯一
【算法】位运算算法——判断字符是否唯一
110 0
|
11月前
|
算法
【算法】位运算合集
/鸽巢原理优化//位图原理//bitMap&0001000只有非0或者0两个结果//说明当前bitMap位是0,那就添加进去}else{//1:把字符串转化为字符数组// //2:把字符扔到hash表中// //获取hash表中x的value值// }else{// }// }
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
586 0
|
算法
【算法】位运算算法——两整数之和
【算法】位运算算法——两整数之和
|
算法
【算法】位运算算法——丢失的数字
【算法】位运算算法——丢失的数字
|
算法
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
467 0
算法】位运算——常见位运算基础操作总结

热门文章

最新文章