LeetCode 22.括号生成 Generate Parentheses

题目连接

n对圆括号,生成所有可能的并且有效的括号组合。

有效的括号组合,就要求了

1、n个‘(’和n个‘)’

2、在括号组合的前i个符号里,‘(’的个数>= ')‘的个数


思路:

如果当前组合里,'(‘的个数=n,并且’)‘的个数=n,就存储该组合。

如果当前组合里,‘(‘的个数<n,就可以添加一个‘(’

如果当前组合里,’)‘的个数<’(‘的个数,就可以添加一个’)'

三个条件是并列的,不是if-else if,而是if-if

代码如下:

class Solution {
public:
    void search(int n,int l,int r,string a,vector<string> &arr)
    {
        if(l==n&&r==n)//l为'('的个数,r为')'的个数,a为当前组合
        {
            arr.push_back(a);
            return;
        }
        if(l<n)//'('的个数<n的时候
        {
            search(n,l+1,r,a+"(",arr);//当前组合+'('
        }
        if(l>r)//')'的个数<'('的个数的时候
        {
            search(n,l,r+1,a+")",arr);//当前组合+')'
        }
    }
    vector<string> generateParenthesis(int n) {
        vector<string> arr;
        search(n,0,0,"",arr);
        return arr;
    }
};



猜你喜欢

转载自blog.csdn.net/ZRXSLYG/article/details/80531450