【LeetCode】 77. Combinations 组合(Medium)(JAVA)
题目地址: https://leetcode.com/problems/combinations/
题目描述:
Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
Example:
Input: n = 4, k = 2
Output:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
题目大意
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
解题方法
这类求组合的方式都一样
1、先递归
2、list.add(),递归,list remove last 元素
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> cur = new ArrayList<>();
cH(1, n, k, res, cur);
return res;
}
public void cH(int index, int n, int k, List<List<Integer>> res, List<Integer> cur) {
if (k == 0) {
res.add(new ArrayList<>(cur));
return;
}
if (index > n || (n - index + 1) < k) return;
for (int i = index; i <= n; i++) {
cur.add(i);
cH(i + 1, n, k - 1, res, cur);
cur.remove(cur.size() - 1);
}
}
}
执行用时 : 3 ms, 在所有 Java 提交中击败了 89.06% 的用户
内存消耗 : 42.5 MB, 在所有 Java 提交中击败了 14.96% 的用户