1
1
"""
2
- Generate all valid combinations of parentheses (Iterative Approach).
2
+ >>> generate_parentheses_iterative(1)
3
+ ['()']
4
+
5
+ >>> generate_parentheses_iterative(0)
6
+ ['']
7
+
8
+ Generate all valid combinations of parentheses (Iterative Approach).
3
9
4
- The algorithm works as follows:
5
- 1. Initialize an empty list to store the combinations.
6
- 2. Initialize a stack to keep track of partial combinations.
7
- 3. Start with empty string and push it onstack along with the counts of '(' and ')'.
10
+ The algorithm works as follows:
11
+ 1. Initialize an empty list to store the combinations.
12
+ 2. Initialize a stack to keep track of partial combinations.
13
+ 3. Start with empty string and push it onstack along with the counts of '(' and ')'.
8
14
9
- 4. While the stack is not empty:
10
- a. Pop a partial combination and its open and close counts from the stack.
11
- b. If the combination length is equal to 2*n, add it to the result.
12
- c. If open count is < n, push new combination with added '(' onto the stack.
13
- d. If close count < open count, push new combination with added ')' on stack.
14
- 5. Return the result containing all valid combinations.
15
+ 4. While the stack is not empty:
16
+ a. Pop a partial combination and its open and close counts from the stack.
17
+ b. If the combination length is equal to 2*n, add it to the result.
18
+ c. If open count is < n, push new combination with added '(' onto the stack.
19
+ d. If close count < open count, push new combination with added ')' on stack.
20
+ 5. Return the result containing all valid combinations.
15
21
16
- Args:
17
- n (int): The desired length of the parentheses combinations
22
+ Args:
23
+ n (int): The desired length of the parentheses combinations
18
24
19
- Returns:
20
- list: A list of strings representing valid combinations of parentheses
25
+ Returns:
26
+ list: A list of strings representing valid combinations of parentheses
21
27
22
- Time Complexity:
23
- O(2^(2n))
28
+ Time Complexity:
29
+ O(2^(2n))
24
30
25
- Space Complexity:
26
- O(2^(2n))
31
+ Space Complexity:
32
+ O(2^(2n))
27
33
"""
28
34
29
35
30
- def generate_parentheses ( n : int ) -> list :
36
+ def generate_parentheses_iterative ( length : int = 0 ) -> list :
31
37
"""
32
- >>> generate_parentheses (3)
38
+ >>> generate_parentheses_iterative (3)
33
39
['()()()', '()(())', '(())()', '(()())', '((()))']
34
40
35
- >>> generate_parentheses (2)
41
+ >>> generate_parentheses_iterative (2)
36
42
['()()', '(())']
37
43
38
- >>> generate_parentheses(1)
39
- ['()']
40
-
41
- >>> generate_parentheses(0)
44
+ >>> generate_parentheses_iterative()
42
45
['']
43
46
44
47
"""
@@ -51,23 +54,19 @@ def generate_parentheses(n: int) -> list:
51
54
while stack :
52
55
current_combination , open_count , close_count = stack .pop ()
53
56
54
- if len (current_combination ) == 2 * n :
57
+ if len (current_combination ) == 2 * length :
55
58
result .append (current_combination )
56
59
else :
57
- if open_count < n :
60
+ if open_count < length :
58
61
stack .append ((current_combination + "(" , open_count + 1 , close_count ))
59
62
if close_count < open_count :
60
63
stack .append ((current_combination + ")" , open_count , close_count + 1 ))
61
64
62
65
return result
63
66
64
67
65
- def main () -> None :
66
- print (generate_parentheses (4 ))
67
-
68
-
69
68
if __name__ == "__main__" :
70
69
import doctest
71
70
72
71
doctest .testmod ()
73
- main ( )
72
+ print ( generate_parentheses_iterative ( 3 ) )
0 commit comments