-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLeetcode Problem 22 Generate Parentheses.txt
More file actions
130 lines (96 loc) · 3.39 KB
/
Leetcode Problem 22 Generate Parentheses.txt
File metadata and controls
130 lines (96 loc) · 3.39 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
22. Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
Hint to solve: recurisvely call the function to generate the combination add them to solution when the total N is exausted.
Solution 1: Faster. Two recursive calls maintining the left and right bracket count.
public class Solution
{
public IList<string> GenerateParenthesis(int n)
{
string currentCombination="";
int totalLeftParenthesis = n;
int toalRightParenthesis = 0;
IList<string> result;
List<string> temp = new List<string>();
GenerateParenthesisRecursive(temp,currentCombination,totalLeftParenthesis,toalRightParenthesis);
result = temp;
return result;
}
public void GenerateParenthesisRecursive(IList<string> result,string currentCombination, int totalLeftParenthesis, int totalRightParenthesis)
{
if(totalLeftParenthesis == 0 && totalRightParenthesis == 0)
{
result.Add(currentCombination);
return;
}
if(totalRightParenthesis > 0)
{
GenerateParenthesisRecursive(result,currentCombination+")",totalLeftParenthesis,totalRightParenthesis - 1);
}
if(totalLeftParenthesis > 0)
{
GenerateParenthesisRecursive(result,currentCombination+"(", totalLeftParenthesis - 1, totalRightParenthesis + 1);
}
}
}
Solution 2: Slower. Generates all the combination and then checks whether the combination was a valid one
by checking matching closing bracket for every opening bracket.
public class Solution {
public void AllParenthesis(int x, string currentPattern,ref List<string> AllCombinations)
{
if(x == 0)
{
AllCombinations.Add(currentPattern);
return;
}
AllParenthesis(x-1,currentPattern+"(",ref AllCombinations);
AllParenthesis(x-1,currentPattern+")",ref AllCombinations);
}
public bool IsValidParenthesis(string pattern)
{
Stack<char> myStack = new Stack<char>();
for(int i = 0; i<pattern.Count(); ++i)
{
if(pattern[i] == '(')
{
myStack.Push(pattern[i]);
}
if(pattern[i]==')')
{
if(myStack.Count() == 0)
return false;
char topCharacter = myStack.Peek();
if(topCharacter == '(')
myStack.Pop();
else
return false;
}
}
if(myStack.Count() == 0)
return true;
else
return false;
}
public IList<string> GenerateParenthesis(int n)
{
List<string> AllCombinations = new List<string>();
AllParenthesis(n*2,"",ref AllCombinations);
IList<string> result = new List<string>();
foreach( var combination in AllCombinations)
{
//Console.WriteLine(combination);
if(IsValidParenthesis(combination))
{
result.Add(combination);
}
}
return result;
}
}