Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
For example,
If n = 4 and k = 2, a solution is:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
给定两个值k,n,返回用n个数字中的k个形成的所有排列组合。
思路:通过迭代,遍历n个数,依次往temp数组中添加元素直到元素个数为k在添加到result的数组组。
public class Solution {
public List<List<int>> Combine(int n, int k) {
List<List<int>> combs = new List<List<int>>();
combine(combs, new List<int>(), 1, n, k);
return combs;
}
public static void combine(List<List<int>> combs, List<int> comb, int start, int n, int k) {
if(k==0) {
combs.Add(new List<int>(comb));
return;
}
for(int i=start;i<=n;i++) {
comb.Add(i);
combine(combs, comb, i+1, n, k-1);
comb.RemoveAt(comb.Count-1);
}
}
}