LeetCode216. 组合总和 III
☆☆思路:做完1 和 2之后,直接套模板就完了。刚开始可以把1到9放入数组中,然后回溯搜索。 AC后再去掉数组进行优化。
class Solution { public List<List<Integer>> combinationSum3(int k, int n) { List<List<Integer>> res = new ArrayList<>(); dfs(k, n, 1, new ArrayList<>(), res); // dfs1(k, n, 1, new ArrayList<>(), res); return res; } private void dfs(int k, int n, int start, List<Integer> list, List<List<Integer>> res) { if (list.size() == k) { if (n == 0) { res.add(new ArrayList<>(list)); } return; } for (int i = start; i <= 9; i++) { if (n < i) break; list.add(i); dfs(k, n - i, i + 1, list, res); list.remove(list.size() - 1); } } // 回溯做选择 private void dfs1(int k, int n, int start, List<Integer> list, List<List<Integer>> res) { if (list.size() == k) { if (n == 0) { res.add(new ArrayList<>(list)); } return; } if (start > 9) return; // 需要放在下边,否则用例k=9,n=45过不了,[[1,2,3,4,5,6,7,8,9]] list.add(start); dfs1(k, n - start, start + 1, list, res); list.remove(list.size() - 1); dfs1(k, n, start + 1, list, res); } }