/**
* @author LiuGang
* @create 2021-05-7:21
*/
public class Main{
public static void main(String[] args) {
String[] set = {"A", "B", "C", "D"};
handAllSubSets(set);
}
/**
* 处理该集合的所有子集
* @param set 需要处理的集合
*/
public static void handAllSubSets(String[] set) {
int len = set.length; //集合的长度
int val = 0;
//根据集合的长度找到对应的整数数例如:长度是3 --->val = 0b111,长度是5---val = 0b11111
for (int i = 0; i < len; i++) {
val |= (1<<i);
}
//依次遍历得到每一个子集
while (val >= 0) {
printSetBinary(val,set);
val--;
}
}
/**
* 打印子集元素
* @param val 集合的子集对应的整数
* @param set 集合
*/
public static void printSetBinary(int val, String[] set) {
//binary为集合元素对应的二进制表现形式
String binary = remedyBinaryString(val, set.length);
int idx = 0;
boolean isNull = true;
while (idx < binary.length()) {
if (binary.charAt(idx) == '1') {
if (!isNull) {
System.out.print(",");
}
System.out.print(set[idx]);
isNull = false;
}
idx++;
}
if (isNull) {
System.out.print("null");
}
System.out.println("---------->"+binary);
}
/**
* 将整数转成二进制字符串,位数不够最高位补零
* @param val 子集对应的整数
* @param length 集合的长度
* @return 子集对应的二进制字符串
*/
private static String remedyBinaryString(int val, int length) {
StringBuilder binary = new StringBuilder(Integer.toBinaryString(val));
while (binary.length() < length) {
binary.insert(0, "0");
}
return binary.toString();
}
}
找出集合的所有子集(二进制)
最新推荐文章于 2021-07-24 23:35:03 发布