LeetCode 77 组合
LeetCode 77 组合
问题描述:
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
组合:对于任意两个数,其组合形式只有一种
执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:41.2 MB, 在所有 Java 提交中击败了42.48%的用户
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> combinations = new ArrayList<>();
List<Integer> combineList = new ArrayList<>();
backtracking(combineList, combinations, 1, k, n);
return combinations;
}
private void backtracking(List<Integer> combineList, List<List<Integer>> combinations, int start, int k, final int n) {
if (k == 0) {
combinations.add(new ArrayList<>(combineList));
return;
}
/*每次从当前位置start顺序往后取数一避免重复*/
/*i<=n-k+1确保从start开始能够取到k个数*/
for (int i = start; i <= n - k + 1; i++) { // 剪枝
combineList.add(i);
backtracking(combineList, combinations, i + 1, k - 1, n);
combineList.remove(combineList.size() - 1);
}
}
}