[概率与数理统计] 对于子集和二进制的关系论述
对于子集和二进制的关系论述
前言:
最近在力扣刷题的时候总是碰到需要遍历子集的类似问题,然后看到了一个比较巧妙的方式在这里总结论述一下
子集:
现有集合U,若存在集合A切A中的所有元素在U中都可以找到,那么集合A为元素U的子集。
根据上述内容来说,我们可以了解到对于一个集合的子集,我们可以对每一个元素进行选择,每一个元素都有选择或者不选择两种状态,而对于两种状态来说,我们可以类比到二进制的0和1,所以我们可以构建一个长度为集合U元素个数的二进制数来进行集合子集遍历。即从0到2^U.length的遍历,而二进制的1代表集合中选中的元素。
代码实现-遍历
遍历
for(int i=0;i< 1<<nums.length;i++){//遍历集合
for(int j =0 ;j<nums.length;j++){//查找选中的元素
if(((i >> j)&1)==1){
/**
* 选择的元素nums[j]
*/
}
}
}
代码实现-递归
递归
dfs(int x){
if(x == set.length){
/**
*边界回溯条件
*/
}
dfs(x+1,true);//true和false根据题目完成对应需求
dfs(x+1,false);
}

浙公网安备 33010602011771号