package me.wayne.leetcodetop100.backtracking;

import java.util.ArrayList;
import java.util.List;

/**
 * 22. 括号生成
 * 数字 n 代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且 有效的 括号组合。
 * 输入：n = 3
 * 输出：["((()))","(()())","(())()","()(())","()()()"]
 * <p>
 * https://leetcode-cn.com/problems/generate-parentheses/
 * <p>
 * 思路：使用回溯法，左括号数 > n，左括号数 > n，右括号 > 左括号时结束递归
 * https://leetcode-cn.com/problems/generate-parentheses/solution/sui-ran-bu-shi-zui-xiu-de-dan-zhi-shao-n-0yt3/
 */
public class LC22_GenerateParenthesis {

    public List<String> generateParenthesis(int n) {
        List<String> res = new ArrayList<>();
        dfs(res, "", 0, 0, n);
        return res;
    }

    private void dfs(List<String> res, String paths, int left, int right, int n) {
        if (left > n) {
            // 左括号数量超了
            return;
        }
        if (right > n) {
            // 有括号数量超了
            return;
        }
        if (right > left) {
            // 有括号比左括号多了
            return;
        }
        if (paths.length() == n * 2) {
            // paths的长度是n*2时得到结果
            res.add(paths);
            return;
        }
        dfs(res, paths + "(", left + 1, right, n);
        dfs(res, paths + ")", left, right + 1, n);
    }
}

@@ -318,17 +318,8 @@
 %E5%8F%B7%E6%95%B0 %3E
- n%EF%BC%8C%E5%B7%A6%E6%8B%AC%E5%8F%B7%E6%95%B0 %3E
  n%EF%BC%8C%E5%8F%B3
@@ -847,17 +847,17 @@
      // 
-%E6%9C%89
+%E5%8F%B3
 %E6%8B%AC%E5%8F%B7%E6%95%B0%E9%87%8F%E8%B6%85%E4%BA%86%0A 
@@ -928,17 +928,17 @@
      // 
-%E6%9C%89
+%E5%8F%B3
 %E6%8B%AC%E5%8F%B7%E6%AF%94%E5%B7%A6%E6%8B%AC%E5%8F%B7%E5%A4%9A%E4%BA%86

修改LC22_GenerateParenthesis注释拼写错误