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

    输入:n = 3 输出:[ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ]

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/generate-parentheses 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    我的解:(可以把这个看成一个框架,先判断再添加)

    1. class Solution {
    2. public List<String> generateParenthesis(int n) {
    3. List<String> list = new ArrayList<>();
    4. char[] cs = new char[n * 2];
    5. generate(0, 0, n * 2, cs, list);
    6. return list;
    7. }
    8. public static void generate(int leftN, int rightN, int N, char[] cs, List<String> list) {
    9. if (rightN + leftN == N) list.add(new String(cs));
    10. if (leftN < N / 2){
    11. cs[leftN + rightN] = '(';
    12. generate(leftN + 1, rightN, N, cs, list);
    13. }
    14. if (rightN < N / 2 && rightN < leftN) {
    15. cs[leftN + rightN] = ')';
    16. generate(leftN, rightN + 1, N, cs, list);
    17. }
    18. }
    19. }