public static List < List < Integer >> combinations(int n, int k) {
List < List < Integer >> result = new ArrayListof);
directedCombinations(n, k, 1, new ArrayList < Integer > (), result);
return result;
}
private static void directedCombinations(int n, int k, int offset,
291 List < Integer > partialCombination,
ListcList < Integer >> result) {
if (partialCombination.size() == k) {
result.add(new ArrayList < > (partialCombination));
return;
}
// Generate remaining combinations over {offset , ...» n - 1} of size
// numRemaining.
final int numRemaining = k - partialCombination.size();
for (int i = offset; i <= n && numRemaining <= n - i + 1; ++i) {
partialCombination.add(i);
directedCombinations(n, k, i + 1, partialCombination, result);
partialCombination.remove(partialCombination.size() - 1);
}
}
Какой временной анализ для этого решения, моя книга говорит, что это O (n * nCk)?nCk имеет смысл, но не понимаю, почему это n * nCk.Ценю всю вашу помощь.