-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcombinations.py
More file actions
39 lines (33 loc) · 1.34 KB
/
combinations.py
File metadata and controls
39 lines (33 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def find_combinations(nums: str) -> set:
if len(nums) == 2:
orig = nums
reverse = nums[::-1]
return set((orig, reverse))
result = set()
for idx, char in enumerate(nums):
# берём текущий элемент
# он будет подставляться в начало строки
base = char
# берём строку без текущего элемента
less = nums[:idx] + nums[idx+1:]
'''
ищем все комбинации этой строки
это те данные, которые вернулись из глубин стэка
'''
combinations = find_combinations(less)
# к каждой строке в получившемся
# множестве добавляем в начало base
for unique_string in combinations:
new_elem = base + unique_string
'''
result - это то, что возвращается вверх по рекурсии
ближе к началу стэка
'''
result.add(new_elem)
return result
if __name__ == '__main__':
nums = '0123'
result = find_combinations(nums)
for item in result:
print(item)
print(f'Количество комбинаций: {len(result)}')