Skip to content

Commit cde8776

Browse files
doctest in all_combinations.py
1 parent 12b1023 commit cde8776

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

backtracking/all_combinations.py

+48
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,32 @@
1212

1313
def combination_lists(n: int, k: int) -> list[list[int]]:
1414
"""
15+
Generates all possible combinations of k numbers out of 1 ... n using itertools.
16+
1517
>>> combination_lists(n=4, k=2)
1618
[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
19+
>>> combination_lists(n=5, k=3)
20+
[[1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3, 5], [1, 4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5]]
21+
>>> combination_lists(n=0, k=0)
22+
[]
23+
>>> combination_lists(n=1, k=1)
24+
[[1]]
25+
>>> combination_lists(n=3, k=0)
26+
[]
27+
>>> combination_lists(n=3, k=4)
28+
[]
29+
>>> combination_lists(n=-1, k=2)
30+
[]
31+
>>> combination_lists(n=4, k=-1)
32+
[]
1733
"""
1834
return [list(x) for x in combinations(range(1, n + 1), k)]
1935

2036

2137
def generate_all_combinations(n: int, k: int) -> list[list[int]]:
2238
"""
39+
Generates all possible combinations of k numbers out of 1 ... n using backtracking.
40+
2341
>>> generate_all_combinations(n=4, k=2)
2442
[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
2543
>>> generate_all_combinations(n=0, k=0)
@@ -34,6 +52,14 @@ def generate_all_combinations(n: int, k: int) -> list[list[int]]:
3452
ValueError: n must not be negative
3553
>>> generate_all_combinations(n=5, k=4)
3654
[[1, 2, 3, 4], [1, 2, 3, 5], [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]]
55+
>>> generate_all_combinations(n=3, k=3)
56+
[[1, 2, 3]]
57+
>>> generate_all_combinations(n=3, k=1)
58+
[[1], [2], [3]]
59+
>>> generate_all_combinations(n=1, k=0)
60+
[[]]
61+
>>> generate_all_combinations(n=1, k=1)
62+
[[1]]
3763
>>> from itertools import combinations
3864
>>> all(generate_all_combinations(n, k) == combination_lists(n, k)
3965
... for n in range(1, 6) for k in range(1, 6))
@@ -56,6 +82,28 @@ def create_all_state(
5682
current_list: list[int],
5783
total_list: list[list[int]],
5884
) -> None:
85+
"""
86+
Helper function to recursively build all combinations.
87+
88+
>>> create_all_state(1, 4, 2, [], result := [])
89+
>>> result
90+
[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
91+
>>> create_all_state(1, 3, 3, [], result := [])
92+
>>> result
93+
[[1, 2, 3]]
94+
>>> create_all_state(2, 2, 1, [1], result := [])
95+
>>> result
96+
[[1, 2]]
97+
>>> create_all_state(1, 0, 0, [], result := [])
98+
>>> result
99+
[[]]
100+
>>> create_all_state(1, 4, 0, [1, 2], result := [])
101+
>>> result
102+
[[1, 2]]
103+
>>> create_all_state(5, 4, 2, [1, 2], result := [])
104+
>>> result
105+
[]
106+
"""
59107
if level == 0:
60108
total_list.append(current_list[:])
61109
return

0 commit comments

Comments
 (0)