|
1 | | -""" |
2 | | -Generate all valid combinations of parentheses (Iterative Approach). |
3 | | -
|
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 ')'. |
8 | | -
|
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 | | -
|
16 | | -Args: |
17 | | - n (int): The desired length of the parentheses combinations |
18 | | -
|
19 | | -Returns: |
20 | | - list: A list of strings representing valid combinations of parentheses |
21 | | -
|
22 | | -Time Complexity: |
23 | | - O(2^(2n)) |
24 | | -
|
25 | | -Space Complexity: |
26 | | - O(2^(2n)) |
27 | | -""" |
28 | | - |
29 | | - |
30 | | -def generate_parentheses_iterative(length: int = 0) -> list: |
| 1 | +def generate_parentheses_iterative(length: int) -> list: |
31 | 2 | """ |
| 3 | + Generate all valid combinations of parentheses (Iterative Approach). |
| 4 | + |
| 5 | + The algorithm works as follows: |
| 6 | + 1. Initialize an empty list to store the combinations. |
| 7 | + 2. Initialize a stack to keep track of partial combinations. |
| 8 | + 3. Start with empty string and push it onstack along with the counts of '(' and ')'. |
| 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*length, add it to the result. |
| 12 | + c. If open count is < length, 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 | + |
| 16 | + Args: |
| 17 | + length: The desired length of the parentheses combinations |
| 18 | + |
| 19 | + Returns: |
| 20 | + A list of strings representing valid combinations of parentheses |
| 21 | + |
| 22 | + Time Complexity: |
| 23 | + O(2^(2n)) |
| 24 | + |
| 25 | + Space Complexity: |
| 26 | + O(2^(2n)) |
| 27 | +
|
32 | 28 | >>> generate_parentheses_iterative(3) |
33 | 29 | ['()()()', '()(())', '(())()', '(()())', '((()))'] |
34 | 30 | >>> generate_parentheses_iterative(2) |
35 | 31 | ['()()', '(())'] |
36 | 32 | >>> generate_parentheses_iterative(1) |
37 | 33 | ['()'] |
38 | | - >>> generate_parentheses_iterative() |
| 34 | + >>> generate_parentheses_iterative(0) |
39 | 35 | [''] |
40 | 36 | """ |
41 | 37 | result = [] |
42 | 38 | stack = [] |
43 | 39 |
|
44 | | - # Each element in stack has a tuple (current_combination, open_count, close_count). |
| 40 | + # Each element in stack is a tuple (current_combination, open_count, close_count) |
45 | 41 | stack.append(("", 0, 0)) |
46 | 42 |
|
47 | 43 | while stack: |
48 | 44 | current_combination, open_count, close_count = stack.pop() |
49 | 45 |
|
50 | 46 | if len(current_combination) == 2 * length: |
51 | 47 | result.append(current_combination) |
52 | | - else: |
53 | | - if open_count < length: |
54 | | - stack.append((current_combination + "(", open_count + 1, close_count)) |
55 | | - if close_count < open_count: |
56 | | - stack.append((current_combination + ")", open_count, close_count + 1)) |
| 48 | + |
| 49 | + if open_count < length: |
| 50 | + stack.append((current_combination + "(", open_count + 1, close_count)) |
| 51 | + |
| 52 | + if close_count < open_count: |
| 53 | + stack.append((current_combination + ")", open_count, close_count + 1)) |
57 | 54 |
|
58 | 55 | return result |
59 | 56 |
|
|
0 commit comments