/**
* 根据List中元素构建出所有可能的组合,以,分隔
* @param in 元素集合
* @param out 每个组合内容
* @param start 从哪个位置开始
* @param combineList 递归时操作的集合指向的是同一引用
* @return 所有元素组合
*/
private static List<String> allCombine(List<String> in, StringBuffer out, int start, List<String> combineList) {
StringBuffer buffer = new StringBuffer();
// 构建以,分隔的元素组合
for (int i = start; i < in.size(); i++) {
out.append(in.get(i)).append(",");
// 所有元素存在的组合
String str = out.toString();
// 删除组合中最后的逗号
String replace = str.substring(0, str.length()-1);
combineList.add(replace);
out = new StringBuffer(replace);
//如果有下个元素,则递归执行
if (i < in.size() - 1) {
out.append(",");
allCombine(in, out, i + 1, combineList);
}
// 每一个元素递归结束后,清除掉该元素
String[] split = str.split(",");
buffer.setLength(0);
for (int j = 0; j < split.length; j++) {
if (j != split.length - 1) {
buffer.append(split[j]).append(",");
}
}
out = new StringBuffer(buffer);
}
return combineList;
}
public static void main(String[] args) {
StringBuffer out = new StringBuffer();
List deptIdList = new ArrayList();
deptIdList.add("1");
deptIdList.add("3");
deptIdList.add("5");
deptIdList.add("7");
deptIdList.add("9");
List list = allCombine(deptIdList, out, 0, new ArrayList<String>());
list.forEach(System.out::println);
}
返回一个集合中元素所有可能的组合(有序),使用“,”分割,最后没有“,”
最新推荐文章于 2021-12-11 20:27:43 发布