(用二进制的思路)给定一个集合S,打印出集合所有的子集
来源:互联网 发布:史丹利的寓言mac 编辑:程序博客网 时间:2024/04/29 19:19
二进制即0,1的组合,我们可以用0,1来分别表示集合的某一个元素到底存不存在一个集合中。
例如:假设S={“A”,"B","C"}
111(7)->A B C
110(6)->A B
101(5)->A C
100(4)->A
011(3)->B C
010(2)->B
001(1)->C
000(0)->NULL
代码实现如下:
package lintcode;public class HandleAllSubSet {public void handleAllSubSet(String[] set){int len = set.length;int val =0;//根据字符串的长度,产生跟长度相同的二进制数 比如 长度是3,则val=111=7for(int i = 0 ;i<len;i++){val |= (1<<i);}while(val>0){printSetByBinary(val,set);val--;}}/** * 根据二进制位的描述输出想象的子集 例如 val=1 set = {"c"} * @param val * @param set */public void printSetByBinary(int val,String[] set){String binary = remedyBinaryString(val,set.length);int idx = 0;boolean isNull = true;while(idx<binary.length()){if(binary.charAt(idx)=='1'){if(isNull == false){System.out.print(",");}System.out.print(set[idx]);isNull = false;}idx++;}if(isNull){System.out.println("null");}System.out.println();}/** * 根据传入的val与字符串的长度,来构造响应长度的其余的字符串子集 例如 如果val=101,而字符串有四个则填充为0101 * @param val * @param strLen * @return */public String remedyBinaryString(int val,int strLen){String binary = Integer.toBinaryString(val);while(binary.length()<strLen){binary = "0"+binary;}return binary;}public static void main(String[] args) {// TODO Auto-generated method stubHandleAllSubSet h =new HandleAllSubSet();String[] set ={"A","B","C","D","E"};h.handleAllSubSet(set);}}
阅读全文
0 0
- (用二进制的思路)给定一个集合S,打印出集合所有的子集
- 给定一个集合(字符数组),打印出它的所有子集
- 求一个集合的所有子集(二进制实现)
- 给定一个可能包含重复的整数的集合,S返回所有可能的子集。
- 打印集合所有的子集
- 打印集合的所有子集
- 给定一个集合,输出它的所有子集
- 一个集合的所有子集
- 运用二进制生成集合的所有子集
- 一个集合所有子集和为sum的组合打印
- 给定一个集合,输出它的所有子集(JAVA实现)
- 注释:打印集合的所有子集
- 生成一个整数集合的所有子集
- 输出一个集合所有的子集合
- 输出一个集合的所有子集
- 获取一个集合的所有子集
- 求一个集合的所有子集
- 求一个集合的所有子集
- Angular:$locationProvider:$locationProvider.html5Mode
- hadoop 在linux中的搭建
- 夏季养生知识为居民提供健康指导
- C++矩阵运算库推荐
- vue 和animate.css 的动画使用
- (用二进制的思路)给定一个集合S,打印出集合所有的子集
- XUtils 3 Source analysis
- iOS 浅谈页面跳转与返回的几种方法
- Python3之concurrent.futures的map方法,回调函数应用(important)
- C语言指针部分总结
- 使用python给outlook多个联系人发邮件
- vue 购买弹出框 动画
- java实参与形参
- 手写servlet方法