55"""
66
77from __future__ import annotations
8- from typing import List , Union
98
10- Element = Union [ int , str ]
9+ Element = int | str
1110
1211
13- def generate_all_permutations (sequence : List [Element ]) -> List [ List [Element ]]:
12+ def generate_all_permutations (sequence : list [Element ]) -> list [ list [Element ]]:
1413 """
1514 Generate and return all permutations of the given sequence.
1615
1716 :param sequence: The input sequence.
1817 :return: A list of permutations (each permutation is a list).
1918
2019 Example 1 (integers):
21- >>> generate_all_permutations([1, 2, 3])
22- [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
20+ >>> generate_all_permutations([1, 2, 3]) # doctest: +NORMALIZE_WHITESPACE
21+ [[1, 2, 3],
22+ [1, 3, 2],
23+ [2, 1, 3],
24+ [2, 3, 1],
25+ [3, 1, 2],
26+ [3, 2, 1]]
2327
2428 Example 2 (strings):
25- >>> generate_all_permutations(["A", "B", "C"])
26- [['A', 'B', 'C'], ['A', 'C', 'B'], ['B', 'A', 'C'], ['B', 'C', 'A'], ['C', 'A', 'B'], ['C', 'B', 'A']]
29+ >>> generate_all_permutations(["A", "B", "C"]) # doctest: +NORMALIZE_WHITESPACE
30+ [['A', 'B', 'C'],
31+ ['A', 'C', 'B'],
32+ ['B', 'A', 'C'],
33+ ['B', 'C', 'A'],
34+ ['C', 'A', 'B'],
35+ ['C', 'B', 'A']]
2736
2837 Example 3 (single element):
2938 >>> generate_all_permutations([1])
@@ -33,18 +42,18 @@ def generate_all_permutations(sequence: List[Element]) -> List[List[Element]]:
3342 >>> generate_all_permutations([])
3443 [[]]
3544 """
36- result : List [ List [Element ]] = []
45+ result : list [ list [Element ]] = []
3746 index_used = [False ] * len (sequence )
3847 create_state_space_tree (sequence , [], 0 , index_used , result )
3948 return result
4049
4150
4251def create_state_space_tree (
43- sequence : List [Element ],
44- current_sequence : List [Element ],
52+ sequence : list [Element ],
53+ current_sequence : list [Element ],
4554 index : int ,
46- index_used : List [bool ],
47- result : List [ List [Element ]],
55+ index_used : list [bool ],
56+ result : list [ list [Element ]],
4857) -> None :
4958 """
5059 Backtracking helper that appends permutations into result.
@@ -64,9 +73,11 @@ def create_state_space_tree(
6473 if not index_used [i ]:
6574 current_sequence .append (sequence [i ])
6675 index_used [i ] = True
67- create_state_space_tree (
68- sequence , current_sequence , index + 1 , index_used , result
69- )
76+ create_state_space_tree (sequence ,
77+ current_sequence ,
78+ index + 1 ,
79+ index_used ,
80+ result )
7081 current_sequence .pop ()
7182 index_used [i ] = False
7283
@@ -75,3 +86,4 @@ def create_state_space_tree(
7586 # example usage; kept under __main__ so it doesn't run on import/tests
7687 print (generate_all_permutations ([3 , 1 , 2 , 4 ]))
7788 print (generate_all_permutations (["A" , "B" , "C" ]))
89+
0 commit comments