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

  1. 输入:n = 3
  2. 输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

  1. 输入:n = 1
  2. 输出:["()"]

提示:

  • 1 <= n <= 8

    解法一:回溯

    1. function generateParenthesis(n: number): string[] {
    2. let res: Array<string> = []
    3. if (n === 0) {
    4. return res
    5. }
    6. const recursion = (cur: string, left: number, right: number) => {
    7. if (left === 0 && right === 0) {
    8. res.push(cur)
    9. return
    10. }
    11. if (left > right) {
    12. return
    13. }
    14. if (left > 0) {
    15. recursion(cur + "(", left - 1, right)
    16. }
    17. if (right > 0) {
    18. recursion(cur + ")", left, right - 1)
    19. }
    20. }
    21. recursion("", n, n)
    22. return res
    23. };