22. Generate Parentheses

Problem:

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:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

Solution:

ONE

Recursive DFS backtracking.

///**
 * @param {number} n
 * @return {string[]}
 */let generateParenthesis = function (n) {const result = [];if (n > 0) {dfs(n, 0, 0, '', result);}return result;};function dfs(n, nopen, nclose, path, result) {if (path.length === n * 2) {
        result.push(path);return;}if (nopen < n) {dfs(n, nopen + 1, nclose, path + '(', result);}if (nclose < nopen) {dfs(n, nopen, nclose + 1, path + ')', result);}}

TWO

BFS.

///**
 * @param {number} n
 * @return {string[]}
 */let generateParenthesis = function (n) {if (n <= 0) {return [];}const queue = [{path: '(',open: 1,close: 0}];while (true) {const { path, open, close } = queue.shift();if (open + close === n * 2) {
            queue.unshift({ path, open, close });break;}if (open < n) {
            queue.push({path: path + '(',open: open + 1,
                close
            });}if (close < open) {
            queue.push({path: path + ')',
                open,close: close + 1});}}return queue.map((x) => x.path);};

: .。. o(≧▽≦)o .。.:☆☆: .。. o(≧▽≦)o .。.:☆☆: .。. o(≧▽≦)o .。.:



: .。. o(≧▽≦)o .。.:☆☆: .。. o(≧▽≦)o .。.: