mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-12-18 01:00:15 +00:00
cecf43d648
* Pyupgrade to Python 3.9 * updating DIRECTORY.md Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
"""
|
|
In this problem, we want to determine all possible combinations of k
|
|
numbers out of 1 ... n. We use backtracking to solve this problem.
|
|
Time complexity: O(C(n,k)) which is O(n choose k) = O((n!/(k! * (n - k)!)))
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
|
|
def generate_all_combinations(n: int, k: int) -> list[list[int]]:
|
|
"""
|
|
>>> generate_all_combinations(n=4, k=2)
|
|
[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
|
|
"""
|
|
|
|
result: list[list[int]] = []
|
|
create_all_state(1, n, k, [], result)
|
|
return result
|
|
|
|
|
|
def create_all_state(
|
|
increment: int,
|
|
total_number: int,
|
|
level: int,
|
|
current_list: list[int],
|
|
total_list: list[list[int]],
|
|
) -> None:
|
|
if level == 0:
|
|
total_list.append(current_list[:])
|
|
return
|
|
|
|
for i in range(increment, total_number - level + 2):
|
|
current_list.append(i)
|
|
create_all_state(i + 1, total_number, level - 1, current_list, total_list)
|
|
current_list.pop()
|
|
|
|
|
|
def print_all_state(total_list: list[list[int]]) -> None:
|
|
for i in total_list:
|
|
print(*i)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
n = 4
|
|
k = 2
|
|
total_list = generate_all_combinations(n, k)
|
|
print_all_state(total_list)
|