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);
    }
}
}
posted @ 2020-09-08 08:50  CodeSPA  阅读(92)  评论(0编辑  收藏  举报