From 0171dc826b935946003c03ed8d0f8367fa13fd69 Mon Sep 17 00:00:00 2001 From: ramzi Date: Sun, 12 Feb 2023 10:52:00 +0100 Subject: [PATCH 1/5] adding generate-parenthses algorithm --- Backtracking/generateParentheses.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Backtracking/generateParentheses.js diff --git a/Backtracking/generateParentheses.js b/Backtracking/generateParentheses.js new file mode 100644 index 0000000000..f64da052bd --- /dev/null +++ b/Backtracking/generateParentheses.js @@ -0,0 +1,19 @@ +const generateParentheses =(n, chres, openParenthese, closedParenthese, res) => { + if (openParenthese === n && closedParenthese === n) { + res.push(chres); + return; + } + + if (openParenthese <= n) { + generateParentheses(n, chres + "(", openParenthese + 1, closedParenthese, res); + } + + if (closedParenthese < openParenthese) { + generateParentheses(n, chres + ")", openParenthese, closedParenthese + 1, res); + } +} + +let res = []; +generateParentheses(3, [], 0, 0, res); + +export { generateParentheses } \ No newline at end of file From 3b7f48933afa2d000d4e9898b55db0de96a8efea Mon Sep 17 00:00:00 2001 From: ramzi Date: Sun, 12 Feb 2023 11:02:29 +0100 Subject: [PATCH 2/5] adding generateParenthses algorithm --- Backtracking/generateParentheses.js | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Backtracking/generateParentheses.js b/Backtracking/generateParentheses.js index f64da052bd..8ff53f0f02 100644 --- a/Backtracking/generateParentheses.js +++ b/Backtracking/generateParentheses.js @@ -1,19 +1,26 @@ -const generateParentheses =(n, chres, openParenthese, closedParenthese, res) => { +/* + * Problem Statement: Given a number n pairs of parenthses, try to Generate all combinations of valid parentheses + * + * link to problem: https://leetcode.com/problems/generate-parentheses/ + * + */ + +const generateParentheses = (n, chres, openParenthese, closedParenthese, res) => { if (openParenthese === n && closedParenthese === n) { - res.push(chres); - return; + res.push(chres) + return } if (openParenthese <= n) { - generateParentheses(n, chres + "(", openParenthese + 1, closedParenthese, res); + generateParentheses(n, chres + '(', openParenthese + 1, closedParenthese, res) } - + if (closedParenthese < openParenthese) { - generateParentheses(n, chres + ")", openParenthese, closedParenthese + 1, res); + generateParentheses(n, chres + ')', openParenthese, closedParenthese + 1, res) } } -let res = []; -generateParentheses(3, [], 0, 0, res); +const res = [] +generateParentheses(3, [], 0, 0, res) -export { generateParentheses } \ No newline at end of file +export { generateParentheses } From f19ff035b8f63acb1993b4f2126dab417af089b6 Mon Sep 17 00:00:00 2001 From: ramzi Date: Sun, 12 Feb 2023 19:04:25 +0100 Subject: [PATCH 3/5] adding generate parentheses algorithm --- Backtracking/generateParentheses.js | 37 +++++++++++-------- .../tests/GenerateParentheses.test.js | 5 +++ 2 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 Backtracking/tests/GenerateParentheses.test.js diff --git a/Backtracking/generateParentheses.js b/Backtracking/generateParentheses.js index 8ff53f0f02..425d8d671d 100644 --- a/Backtracking/generateParentheses.js +++ b/Backtracking/generateParentheses.js @@ -1,26 +1,31 @@ -/* - * Problem Statement: Given a number n pairs of parenthses, try to Generate all combinations of valid parentheses +/** * - * link to problem: https://leetcode.com/problems/generate-parentheses/ + * Problem Statement: Given a number n pairs of parentheses, try to Generate all combinations of valid parentheses; * + * Link to problem: https://leetcode.com/problems/generate-parentheses/ */ -const generateParentheses = (n, chres, openParenthese, closedParenthese, res) => { - if (openParenthese === n && closedParenthese === n) { - res.push(chres) - return - } +const generateParentheses = (n) => { + const res = [] - if (openParenthese <= n) { - generateParentheses(n, chres + '(', openParenthese + 1, closedParenthese, res) - } + const solve = (n, chres, openParenthese, closedParenthese, res) => { + if (openParenthese === n && closedParenthese === n) { + res.push(chres) + return + } + + if (openParenthese <= n) { + solve(n, chres + '(', openParenthese + 1, closedParenthese, res) + } - if (closedParenthese < openParenthese) { - generateParentheses(n, chres + ')', openParenthese, closedParenthese + 1, res) + if (closedParenthese < openParenthese) { + solve(n, chres + ')', openParenthese, closedParenthese + 1, res) + } } -} -const res = [] -generateParentheses(3, [], 0, 0, res) + solve(n, '', 0, 0, res) + + return res +} export { generateParentheses } diff --git a/Backtracking/tests/GenerateParentheses.test.js b/Backtracking/tests/GenerateParentheses.test.js new file mode 100644 index 0000000000..d7431a1a3c --- /dev/null +++ b/Backtracking/tests/GenerateParentheses.test.js @@ -0,0 +1,5 @@ +import { generateParentheses } from '../generateParentheses' + +test('generate all valid parentheses of input 3', () => { + expect(generateParentheses(3)).toStrictEqual(['((()))', '(()())', '(())()', '()(())', '()()()']) +}) From 8b34991a2f9a94201fdbc9ec00fb1b7dc308bf92 Mon Sep 17 00:00:00 2001 From: ramzi Date: Sun, 12 Feb 2023 20:08:38 +0100 Subject: [PATCH 4/5] fixing comments according to the JDoc comments, cleaning code --- Backtracking/generateParentheses.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Backtracking/generateParentheses.js b/Backtracking/generateParentheses.js index 425d8d671d..b8325b737e 100644 --- a/Backtracking/generateParentheses.js +++ b/Backtracking/generateParentheses.js @@ -1,29 +1,29 @@ /** - * * Problem Statement: Given a number n pairs of parentheses, try to Generate all combinations of valid parentheses; - * + * @param {number} n - number of given parentheses + * @return {string[]} res - array that contains all valid parentheses * Link to problem: https://leetcode.com/problems/generate-parentheses/ */ const generateParentheses = (n) => { const res = [] - const solve = (n, chres, openParenthese, closedParenthese, res) => { + const solve = (chres, openParenthese, closedParenthese) => { if (openParenthese === n && closedParenthese === n) { res.push(chres) return } if (openParenthese <= n) { - solve(n, chres + '(', openParenthese + 1, closedParenthese, res) + solve(chres + '(', openParenthese + 1, closedParenthese) } if (closedParenthese < openParenthese) { - solve(n, chres + ')', openParenthese, closedParenthese + 1, res) + solve(chres + ')', openParenthese, closedParenthese + 1) } } - solve(n, '', 0, 0, res) + solve('', 0, 0) return res } From 6273ee02b43c4851628c1c1a22d860babb15be82 Mon Sep 17 00:00:00 2001 From: ramzi Date: Sun, 12 Feb 2023 20:41:38 +0100 Subject: [PATCH 5/5] fixing comments --- Backtracking/generateParentheses.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backtracking/generateParentheses.js b/Backtracking/generateParentheses.js index b8325b737e..8414c95b08 100644 --- a/Backtracking/generateParentheses.js +++ b/Backtracking/generateParentheses.js @@ -2,7 +2,7 @@ * Problem Statement: Given a number n pairs of parentheses, try to Generate all combinations of valid parentheses; * @param {number} n - number of given parentheses * @return {string[]} res - array that contains all valid parentheses - * Link to problem: https://leetcode.com/problems/generate-parentheses/ + * @see https://leetcode.com/problems/generate-parentheses/ */ const generateParentheses = (n) => {