Skip to content

Commit fd2ee00

Browse files
authored
Merge pull request neetcode-gh#1934 from nirajvenkat/patch-3
Update 0022-generate-parentheses.rs
2 parents 29df8e9 + 58c7afe commit fd2ee00

File tree

1 file changed

+16
-28
lines changed

1 file changed

+16
-28
lines changed

rust/0022-generate-parentheses.rs

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,26 @@
11
impl Solution {
22
pub fn generate_parenthesis(n: i32) -> Vec<String> {
3-
/*
4-
Only add open parenthesis if open < n
5-
Only add closing parenthesis if close < open
6-
valid if open == close == n
7-
*/
8-
let mut stack: Vec<u8> = vec![];
3+
// Using the function stack instead of an explicitly allocated Vec
94
let mut res: Vec<String> = vec![];
105

11-
fn backtrack(
12-
stack: &mut Vec<u8>,
13-
res: &mut Vec<String>,
14-
open_n: i32,
15-
closed_n: i32,
16-
n: i32,
17-
) {
18-
if open_n == closed_n && closed_n == n {
19-
res.push(String::from_utf8(stack.clone()).unwrap());
6+
fn backtrack(res: &mut Vec<String>, s: String, open: i32, close: i32) {
7+
if open == 0 && close == 0 {
8+
res.push(s);
209
return;
2110
}
22-
23-
if open_n < n {
24-
stack.push(b'(');
25-
backtrack(stack, res, open_n + 1, closed_n, n);
26-
stack.pop();
27-
}
28-
29-
if closed_n < open_n {
30-
stack.push(b')');
31-
backtrack(stack, res, open_n, closed_n + 1, n);
32-
stack.pop();
11+
if open == close {
12+
backtrack(res, s.clone() + "(", open - 1, close);
13+
} else {
14+
if open > 0 {
15+
backtrack(res, s.clone() + "(", open - 1, close);
16+
}
17+
if close > 0 {
18+
backtrack(res, s.clone() + ")", open, close - 1);
19+
}
3320
}
3421
}
35-
backtrack(&mut stack, &mut res, 0, 0, n);
22+
23+
backtrack(&mut res, String::from(""), n, n);
3624
res
3725
}
38-
}
26+
}

0 commit comments

Comments
 (0)