public static List<List<Integer>> kNumber2SumM(List<Integer> param, int k, int m) {
List<List<Integer>> result = new ArrayList<>();
if (k == 1) {
if (param.contains(m)) {
List<Integer> temp = new ArrayList<>();
temp.add(m);
result.add(temp);
return result;
}
}
for (int i = 0; i < param.size(); i++) {
List<Integer> nextParam = new ArrayList<>();
nextParam.addAll(param);
nextParam.remove(i);
List<List<Integer>> lists = kNumber2SumM(nextParam, k - 1, m - param.get(i));
for (List<Integer> list : lists) {
list.add(param.get(i));
// 不加这个判断就是一个全排列的结果
if (!hasList(result, list)) {
result.add(list);
}
}
}
return result;
}