leetcode22. 括号生成(回溯)

一:题目

leetcode22. 括号生成(回溯)_第1张图片

二:上码

class Solution {
    public List<String> generateParenthesis(int n) {
       List<String> ans = new ArrayList<>();
       def(ans,new StringBuilder(),n,n);
       return ans;
    }

    /**
    left:左边还可以用的括号数量
    right:右边还可以用的括号数量
    */
    public void def(List<String> ans,StringBuilder path,int left,int right) {

        if (left == 0 && right == 0) {//将括号的数量用完了
            ans.add(path.toString());
            return ;
        }

        if (right < left) return ;//进行减枝

        if (left > 0) {//左边的括号
            path.append("(");
            def(ans,path,left-1,right);
            path.deleteCharAt(path.length()-1);
        }

        if (right > 0) {//右边的括号
            path.append(")");
            def(ans,path,left,right-1);
            path.deleteCharAt(path.length()-1);
        }
    }

}

leetcode22. 括号生成(回溯)_第2张图片

你可能感兴趣的:(java刷lc,算法,leetcode)