赞
踩
你可以按 任何顺序 返回答案。
示例 1:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
public class Combine { public List<List<Integer>> combine(int n, int k) { List<List<Integer>> res = new ArrayList<>(); backtrack(1, n, k, new ArrayList<>(), res); return res; } private void backtrack(int start, int n, int k, List<Integer> path, List<List<Integer>> res) { // 如果组合完成 if (path.size() == k) { res.add(new ArrayList<>(path)); return; } // 从`start`到`n`遍历所有的数字 for (int i = start; i <= n; i++) { // 将`i`添加到当前组合 path.add(i); // 使用下一个整数完成组合 backtrack(i + 1, n, k, path, res); // 回溯,通过移除`i` path.remove(path.size() - 1); } } // 测试用例 public static void main(String[] args) { Combine solution = new Combine(); System.out.println(solution.combine(4, 2)); // 期望输出: [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]] System.out.println(solution.combine(5, 3)); // 期望输出: [[1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3, 5], [1, 4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5]] } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。