TheAlgorithms/C++
1.0.0
All the algorithms implemented in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
generate_parentheses.cpp
Go to the documentation of this file.
1
13
14
#include <cassert>
15
#include <iostream>
16
#include <vector>
17
22
namespace
backtracking
{
26
class
generate_parentheses
{
27
private
:
28
std::vector<std::string>
res
;
29
30
void
makeStrings
(std::string str,
int
n,
int
closed,
int
open);
31
32
public
:
33
std::vector<std::string>
generate
(
int
n);
34
};
35
44
45
void
generate_parentheses::makeStrings
(std::string str,
int
n,
46
int
closed,
int
open) {
47
if
(closed > open)
// We can never have more closed than open
48
return
;
49
50
if
((str.length() == 2 * n) &&
51
(closed != open)) {
// closed and open must be the same
52
return
;
53
}
54
55
if
(str.length() == 2 * n) {
56
res
.push_back(str);
57
return
;
58
}
59
60
makeStrings
(str +
')'
, n, closed + 1, open);
61
makeStrings
(str +
'('
, n, closed, open + 1);
62
}
63
70
std::vector<std::string>
generate_parentheses::generate
(
int
n) {
71
backtracking::generate_parentheses::res
.clear();
72
std::string str =
"("
;
73
generate_parentheses::makeStrings
(str, n, 0, 1);
74
return
res
;
75
}
76
}
// namespace backtracking
77
82
static
void
test
() {
83
int
n = 0;
84
std::vector<std::string> patterns;
85
backtracking::generate_parentheses
p;
86
87
n = 1;
88
patterns = {{
"()"
}};
89
assert(p.
generate
(n) == patterns);
90
91
n = 3;
92
patterns = {{
"()()()"
}, {
"()(())"
}, {
"(())()"
}, {
"(()())"
}, {
"((()))"
}};
93
94
assert(p.
generate
(n) == patterns);
95
96
n = 4;
97
patterns = {{
"()()()()"
}, {
"()()(())"
}, {
"()(())()"
}, {
"()(()())"
},
98
{
"()((()))"
}, {
"(())()()"
}, {
"(())(())"
}, {
"(()())()"
},
99
{
"(()()())"
}, {
"(()(()))"
}, {
"((()))()"
}, {
"((())())"
},
100
{
"((()()))"
}, {
"(((())))"
}};
101
assert(p.
generate
(n) == patterns);
102
103
std::cout <<
"All tests passed\n"
;
104
}
105
110
int
main
() {
111
test
();
// run self-test implementations
112
return
0;
113
}
test
void test()
Definition
caesar_cipher.cpp:100
backtracking::generate_parentheses
generate_parentheses class
Definition
generate_parentheses.cpp:26
backtracking::generate_parentheses::res
std::vector< std::string > res
Contains all possible valid patterns.
Definition
generate_parentheses.cpp:28
backtracking::generate_parentheses::makeStrings
void makeStrings(std::string str, int n, int closed, int open)
function that adds parenthesis to the string.
Definition
generate_parentheses.cpp:45
backtracking::generate_parentheses::generate
std::vector< std::string > generate(int n)
wrapper interface
Definition
generate_parentheses.cpp:70
main
int main()
Main function.
Definition
generate_parentheses.cpp:110
backtracking
for vector container
backtracking
generate_parentheses.cpp
Generated by
1.18.0