1. 题目描述

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例:

  1. 输入:n = 3
  2. 输出:[
  3. "((()))",
  4. "(()())",
  5. "(())()",
  6. "()(())",
  7. "()()()"
  8. ]

2. 解题思路

这个题目的一个比较直接的思路就是使用递归,对于左括号的数量,要控制小于n,对于右括号的数量,要控制小于左括号的数量,并且要小于n,这样不断递归,保存可能的结果。

3. 代码实现

  1. /**
  2. * @param {number} n
  3. * @return {string[]}
  4. */
  5. function fn(left, right, n, s, res){
  6. if(left === n && right === n){
  7. return res.push(s)
  8. }
  9. if(left < n){
  10. fn(left+1, right, n, s+'(', res)
  11. }
  12. if(right < left){
  13. fn(left, right+1, n, s+')', res)
  14. }
  15. }
  16. var generateParenthesis = function(n) {
  17. let res = []
  18. fn(0, 0, n, '', res)
  19. return res
  20. };

4. 提交结果

22. 括号生成 - 图1