LeetCode 22. 括号生成

1、题目

22. 括号生成 - 力扣(LeetCode) https://leetcode-cn.com/problems/generate-parentheses/

2、题解

本题主要是解决两个问题,第一步是得到n对括号的排列组合方式,这个必须将左右括号分开排列组合。不然就只有一种。这样的话只需要通过递归的方式将n个左右括号排列组合的可能全部形成String值,装到List中即可。第二步,是得到有效的括号,即先有一个左括号,才能有一个右括号。所以将递归方法中的判断条件从:

if(left>0){
          getParenthesisResult(result,str+'(',left-1,right);
 }
 if(right>0){
          getParenthesisResult(result,str+')',left,right-1);
 }

改为:

if(left>0){
          getParenthesisResult(result,str+'(',left-1,right);
 }
 if(right>left){
          getParenthesisResult(result,str+')',left,right-1);
 }

即可。

3、代码

//得到有效的括号的组合结果;
    class Solution {
        public List generateParenthesis(int n) {
            ArrayList result = new ArrayList<>();
            String str = new String();
            getParenthesisResult(result,str,n,n);
            return result;
        }
        private void getParenthesisResult(ArrayList result, String str, int left, int right) {
            if(left==0&&right==0){
                result.add(str);
                return;
            }
            if(left>0){
                getParenthesisResult(result,str+'(',left-1,right);
            }
            if(right>left){
                getParenthesisResult(result,str+')',left,right-1);
            }
        }
    }

4、执行结果

LeetCode 22. 括号生成_第1张图片
image.png

你可能感兴趣的:(LeetCode 22. 括号生成)