美文网首页
22. Generate Parentheses

22. Generate Parentheses

作者: 菁卡因 | 来源:发表于2018-09-12 19:46 被阅读0次

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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:回溯算法,在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集。其中需要明确三点:选择 (Options),限制 (Restraints),结束条件 (Termination)。
对于这道题来说,总共有以下的考虑
1.选择:
左括号。
右括号。
2.限制:
如果左括号已经用完了,则不能再加左括号了。
如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。
3.结束条件:
左右括号都已经用完。
代码:

  /**
   * @param {number} n
   * @return {string[]}
   */
  var generateParenthesis = function(n) {
      var res = [];
      backtrack('', n, n, res);
      function backtrack(tempList, left, right, res){
          if(left===0 && right===0){
              res.push(tempList);
              return;
          }
         if(left>right) return;
          if(left>0){
              backtrack(tempList+"(", left-1, right, res);
          }
          if(right>0){
              backtrack(tempList+")", left, right-1, res);
          }
      }
      return res;
  };

相关文章

网友评论

      本文标题:22. Generate Parentheses

      本文链接:https://www.haomeiwen.com/subject/sgebgftx.html