leetcode22. 括号生成(回溯)

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

示例:

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

代码

class Solution {
    ArrayList<String> strings=new ArrayList<>();
    public List<String> generateParenthesis(int n) {

        generatePa(n,0,0,new StringBuilder());
        return strings;
    }
    public void generatePa(int n,int left,int right,StringBuilder stringBuilder) {

        if(left==n&&right==n) {//匹配完成
            strings.add(stringBuilder.toString());
            return;
        } 
        
        if(right+1<=left)//有足够的(匹配
        {
            stringBuilder.append(')');
            generatePa(n,left,right+1,stringBuilder);
            stringBuilder.deleteCharAt(stringBuilder.length()-1);//回溯
        }
        if(left+1<=n)//有足够的(可以用
        {
            stringBuilder.append('(');
            generatePa(n,left+1,right,stringBuilder);
            stringBuilder.deleteCharAt(stringBuilder.length()-1);
        }



    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44560620/article/details/107748937
今日推荐