字符串版本
/**
* 获取一个字符串中所有的非空真子集
*
* @param set 需要获取子集的项
* @return list
* 思路:如果集合S(A,B,C,D)。其大小为4。拥有2的4次方个子集,即0-15,二进制表示为0000,0001。...,1111。
* 相应的子集为空集。{D},...。{A,B,C,D}。
*/
public static void getSub() {
String set = "BCE";
char[] charArray = set.toCharArray();
for (int i = 1; i < (int) Math.pow(2, set.length()) - 1; i++) {
String s = Integer.toBinaryString(i);
StringBuilder buffer = new StringBuilder(s);
for (int j = 0; j < set.length() - s.length(); j++) {
buffer.insert(0, "0");
}
String string = buffer.toString();
char[] chars = string.toCharArray();
for (int k = 0; k < chars.length; k++) {
if (chars[k] == '1') {
System.out.print(charArray[k]);
}
}
System.out.print("\n");
}
}
测试
集合版本
public static List<String> getSubset(String set) {
char[] charArray = set.toCharArray();
List<String> list = new ArrayList<>();
for (int i = 1; i < (int) Math.pow(2, set.length()) - 1; i++) {
String s = Integer.toBinaryString(i);
StringBuilder buffer = new StringBuilder(s);
StringBuilder sets = new StringBuilder();
for (int j = 0; j < set.length() - s.length(); j++) {
buffer.insert(0, "0");
}
String string = buffer.toString();
char[] chars = string.toCharArray();
for (int k = 0; k < chars.length; k++) {
if (chars[k] == '1') {
sets.append(charArray[k]);
}
}
list.add(sets.toString());
}
// for (int ik = 0; ik < list.size(); ik++) {
// System.out.print(list.get(ik)+" ");
// }
return list;
}
有需要联系 QQ:2248557717