Skip to content

Commit e1d2afb

Browse files
committedMay 15, 2023
✨ [q22] Runtime 62 ms Beats 53.3% Memory 42.4 MB Beats 87.2% - After visiting solution online -- BUT not their code
1 parent 92d81be commit e1d2afb

File tree

2 files changed

+19
-248
lines changed

2 files changed

+19
-248
lines changed
 

Diff for: ‎22/my_solution.js

+12-164
Original file line numberDiff line numberDiff line change
@@ -8,177 +8,25 @@ const generateParenthesis = (n) => {
88
let processString = `${"(".repeat(n)}${")".repeat(n)}`
99
console.log(`input: ${n} - processString - ${processString}`)
1010

11-
let result = [];
12-
// Process wrapper
13-
14-
let ref = [
15-
"())(()",
16-
"())()(",
17-
18-
"()(())",
19-
"()()()",
20-
"()())(",
21-
22-
23-
"((()))",
24-
"(()())",
25-
"(())()",
26-
"(()))(",
27-
28-
29-
")((())",
30-
")(()()",
31-
")(())(",
32-
33-
")()(()",
34-
")()()("
35-
]
36-
37-
for (let i = 0; i < n - 1; i++) {
38-
let pattern = "";
39-
for (let k = 0; k < i; k++) {
40-
if (k > 0) return;
41-
pattern += ")";
42-
}
43-
44-
pattern += "(";
45-
46-
for (let h = 0; h < (n / 2); h++) {
47-
console.log(`------> h - pattern - h: ${h}`)
48-
pattern += ")";
49-
console.log(pattern)
50-
}
51-
52-
for (let j = 0; j < (n / 2) - 1; j++) {
53-
console.log(`----> j - pattern - j: ${j} - n: ${n}`)
54-
// console.log(pattern)
55-
pattern += "(";
56-
console.log(pattern)
57-
// pattern += ")";
58-
console.log("Before last - pattern")
59-
console.log(pattern)
60-
61-
for (let l = 0; l < (n / 2) - 1; l++) {
62-
console.log(`--> l - pattern - l: ${l}`)
63-
console.log(pattern)
64-
pattern += ")";
65-
console.log(pattern)
66-
}
67-
68-
}
69-
70-
// console.log("LAST - pattern");
71-
// console.log(pattern);
72-
// result = [...result, pattern]
73-
// console.log(`(${ pattern })`);
74-
}
11+
let result = process(n, n, "", []);
7512

7613
console.log("result")
7714
console.log(result)
78-
//
79-
// return `()`;
80-
8115

8216
return;
8317
};
84-
// 0
85-
// "((()))"
86-
// "()(())"
87-
// "(())()"
8818

89-
// 1
90-
// "((()))"
91-
// -> "(())"
92-
// "()()"
93-
// "(()())"
19+
// nbOpen > NbClose
20+
// Only can add closed when open is > closed
21+
const process = (open, close, pattern, result) => {
22+
// exit
23+
if (open > close) return result;
24+
if (0 === open && 0 === close) return result.push(pattern);
25+
if (open > 0) process(open - 1, close, `${pattern}(`, result);
26+
if (close > 0) process(open, close - 1, `${pattern})`, result);
9427

95-
// 2
96-
// "(())"
97-
// -> "()"
98-
// "()()"
99-
// "()()()"
28+
return result;
29+
}
10030

10131
// generateParenthesis(4);
102-
generateParenthesis(4);
103-
// 4 -> 14
104-
// [
105-
// "(((())))",
106-
// "((()()))",
107-
// "((())())", x
108-
// "((()))()",
109-
// "(()(()))", x
110-
// "(()()())",
111-
// "(()())()", x
112-
// "(())(())",
113-
// "(())()()", x
114-
// "()((()))",
115-
// "()(()())", x
116-
// "()(())()", x
117-
// "()()(())", x
118-
// "()()()()"
119-
// ]
120-
// [
121-
// "((()))",
122-
// "(()())",
123-
// "(())()",
124-
// "(()))(",
125-
// "()(())",
126-
// "()()()",
127-
// "()())(",
128-
// "())(()",
129-
// "())()(",
130-
// ")((())",
131-
// ")(()()",
132-
// ")(())(",
133-
// ")()(()",
134-
// ")()()("
135-
// ]
136-
//
137-
// [
138-
// "((()))",
139-
// "(()())",
140-
// "(())()",
141-
// "(()))(",
142-
// "()(())",
143-
// "()()()",
144-
// "()())(",
145-
// "())(()",
146-
// "())()(",
147-
// ")((())",
148-
// ")(()()",
149-
// ")(())(",
150-
// ")()(()",
151-
// ")()()("
152-
// ]
153-
//
154-
//
155-
//
156-
//
157-
// [
158-
// "(((())))",
159-
// "()())",
160-
// "()()()()",
161-
// "(())(())",
162-
// "()((()))",
163-
// "((()))()"
164-
// ]
165-
166-
167-
168-
// "(" ")"
169-
170-
// "((()))",
171-
// "(()())",
172-
// "()()()",
173-
// "(())()",
174-
// "()(())"
175-
176-
// "()((()))"
177-
// "((()))()"
178-
// "()()(())"
179-
// "(())()()"
180-
// "()()()()"
181-
182-
// "((((()))))"
183-
// "()(((())))"
184-
// "(((())))()"
32+
generateParenthesis(3);

Diff for: ‎22/solution.js

+7-84
Original file line numberDiff line numberDiff line change
@@ -3,91 +3,14 @@
33
* @return {string[]}
44
*/
55
const generateParenthesis = (n) => {
6-
if (1 === n) return ["()"];
7-
return exploreString(n, 0, `${"(".repeat(n)}${")".repeat(n)}`, [`${"(".repeat(n)}${")".repeat(n)}`]);
6+
return process(n, n, "", []);
87
};
98

10-
const exploreString = (n, i, processString, result) => {
11-
let str = processString.slice((1), (processString.length - 1));
12-
13-
// "((())())", x
14-
// "(()(()))", x
15-
// "()()(())"
16-
17-
// "(()())()", x
18-
// "()(()())", x
19-
if ("" === str) {
20-
console.log("result")
21-
console.log(result)
22-
// console.log(processString)
23-
for (let i = 0; i < n; i++) {
24-
let a = `${"(".repeat(n - (i + 1))}${processString.repeat(i + 1)}${")".repeat(n - (i + 1))}`;
25-
if (!result.includes(a)) result = [...result, a];
26-
27-
console.log("((n / 2) - i)")
28-
console.log(((n / 2) - i))
29-
30-
if ((((n / 2) - i) >= 0) && ((n / 2) - i) === Math.round(((n / 2) - i))) {
31-
let b = `${"()".repeat(i)}${"(".repeat(n / 2)}${")".repeat(n / 2)}${"()".repeat((n / 2) - i)}`;
32-
console.log("b")
33-
console.log(b)
34-
if (!result.includes(b)) result = [...result, b];
35-
36-
if (i < (n / 2)) {
37-
let c = `${"()".repeat(i)}(${"()".repeat(n / 2)})${"()".repeat((n / 2) - (i + 1))}`;
38-
console.log("c")
39-
console.log(c)
40-
if (!result.includes(c)) result = [...result, c];
41-
42-
let d = `(${"()".repeat(i)}${"(".repeat(n / 2)}${")".repeat(n / 2)}${"()".repeat((n / 2) - (i + 1))})`;
43-
console.log("d")
44-
console.log(d)
45-
if (!result.includes(d)) result = [...result, d];
46-
}
47-
}
48-
49-
}
50-
51-
// if (!result.includes(processString.repeat(n))) result = [...result, processString.repeat(n)];
52-
// if (!result.includes(`(${processString.repeat(n - 1)})`)) result = [...result, `(${processString.repeat(n - 1)})`];
53-
console.log("result")
54-
console.log(result)
55-
return result;
56-
}
57-
58-
let pre = `${"(".repeat(i + 1)}${")".repeat(i + 1)}`;
59-
60-
61-
if (`${pre}${str}` === `${str}${pre}`) {
62-
if (!result.includes(`${pre}${str}`)) result = [...result, ...[`${pre}${str}`]];
63-
} else {
64-
if (!result.includes(`${pre}${str}`)) result = [...result, ...[`${pre}${str}`]];
65-
if (!result.includes(`${str}${pre}`)) result = [...result, ...[`${str}${pre}`]];
66-
}
67-
68-
69-
i++;
70-
return exploreString(n, i, str, result);
9+
const process = (open, close, pattern, result) => {
10+
if (open > close) return result;
11+
if (0 === open && 0 === close) return result.push(pattern);
12+
if (open > 0) process(open - 1, close, `${pattern}(`, result);
13+
if (close > 0) process(open, close - 1, `${pattern})`, result);
14+
return result;
7115
}
7216

73-
generateParenthesis(4);
74-
// generateParenthesis(3);
75-
[
76-
"((((()))))",
77-
"(((()())))",
78-
"(((())()))",
79-
"(((()))())",
80-
"(((())))()",
81-
"((()(())))",
82-
"((()()()))",
83-
"((()())())",
84-
"((()()))()",
85-
"((())(()))",
86-
"((())()())",
87-
"((())())()",
88-
"((()))(())",
89-
"((()))()()",
90-
"(()((())))",
91-
"(()(()()))",
92-
"(()(())())", "(()(()))()", "(()()(()))", "(()()()())", "(()()())()", "(()())(())", "(()())()()", "(())((()))", "(())(()())", "(())(())()", "(())()(())", "(())()()()", "()(((())))", "()((()()))", "()((())())", "()((()))()", "()(()(()))", "()(()()())", "()(()())()", "()(())(())", "()(())()()", "()()((()))", "()()(()())", "()()(())()", "()()()(())", "()()()()()"
93-
]

0 commit comments

Comments
 (0)
Please sign in to comment.