public class combinationUtil{
public static void main(String[] args) {
System.out.println(combination(Lists.newArrayList(1, 2, 3), 2));
//运行结果: [[1, 2], [1, 3], [2, 3]]
}
/**
* 给定列表给定长度求组合数
* @param values i.e.{1,2,3}
* @param size i.e. 2
* @return i.e. [[1,2],[1,3],[2,3]]
* @param <T> 列表泛型
*/
public static <T> List<List<T>> combination(List<T> values, int size) {
if (0 == size) {
return Collections.singletonList(Collections.<T>emptyList());
}
if (values.isEmpty()) {
return Collections.emptyList();
}
List<List<T>> combination = new LinkedList<List<T>>();
T actual = values.iterator().next();
List<T> subSet = new LinkedList<T>(values);
subSet.remove(actual);
List<List<T>> subSetCombination = combination(subSet, size - 1);
for (List<T> set : subSetCombination) {
List<T> newSet = new LinkedList<T>(set);
newSet.add(0, actual);
combination.add(newSet);
}
combination.addAll(combination(subSet, size));
return combination;
}
}
求列表随意长度的组合
于 2023-11-04 14:30:33 首次发布