括号生成 (Generate Parentheses)

 

思路:回溯+剪枝

// @Title: 括号生成 (Generate Parentheses)
// @Author: qisiii
// @Date: 2024-04-13 15:11:10
// @Runtime: 2 ms
// @Memory: 42.2 MB
// @comment: 回溯+剪枝
// @flag: WHITE
class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> result = new ArrayList<>();
        if(n<0){
            return result;
        }
        doAction("",n,n,result);
        return result;
    }
    /**
     *str 叶子节点
     *l左括号剩余的数量
     *r右括号剩余的数量
     *result 结果
     */
    public void doAction(String str,int l,int r,List<String> result){
        if(l==0&&r==0){
            result.add(str);
        }
        //剪枝,即剩余左括号数量大于剩余右括号数量时不是正规的括号,如")","(()"
        if(l>r){
            return;
        }
        if(l>0){
            doAction(str+"(",l-1,r,result);
        }
        if(r>0){
            doAction(str+")",l,r-1,result);
        }
    }

    
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2024-10-18