数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]
提示:
1 <= n <= 8
解题代码:
class Solution { static List<String> list = null; public List<String> generateParenthesis(int n) { list = new ArrayList<>(); generate( n, n, "", 0); return list; } /** * * @param nLeft 左括号还可以用的个数 * @param nRight 右括号还可以用的个数 * @param str 当前字符串 * @param nLeftCount 左括号还可以抵消的个数 */ public void generate(int nLeft, int nRight, String str, int nLeftCount) { //括号都用完了,拼接完成 if (nLeft == 0 && nRight == 0) { list.add(str); return; } //左括号还可以用 if (nLeft > 0) { generate(nLeft - 1, nRight, str + "(", nLeftCount + 1); } //右括号还可以用,左括号还可以抵消 if (nRight > 0 && nLeftCount > 0) { generate(nLeft, nRight - 1, str + ")", nLeftCount - 1); } } }