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; }