括号生成

匿名 (未验证) 提交于 2019-12-02 23:04:42

问题描述

n有效的括号组合。

=3,生成结果为:

 [   "((()))",   "(()())",   "(())()",   "()(())",   "()()()" ]

代码实现

思路:定义两个变量left和right分别表示剩余左右括号的个数。如果在某次递归时,左括号的个数大于右括号的个数,说明此时生成的字符串中右括号的个数大于左括号的个数,即会出现')('这样的非法串,所以这种情况直接返回,不继续处理。如果left和right都为0,则说明此时生成的字符串已有3个左括号和3个右括号,且字符串合法,则存入结果中后返回。如果以上两种情况都不满足,若此时left大于0,则调用递归函数,注意参数的更新,若right大于0,则调用递归函数,同样要更新参数。

代码如下:

 1 class Solution {  2 public:  3     vector<string> generateParenthesis(int n) {  4         vector<string> res;  5         generateParenthesisDFS(n, n, "", res);  6         return res;  7     }  8     void generateParenthesisDFS(int left, int right, string out, vector<string> &res) {  9         if (left > right) return; 10         if (left == 0 && right == 0) res.push_back(out); 11         else { 12             if (left > 0) generateParenthesisDFS(left - 1, right, out + '(', res); 13             if (right > 0) generateParenthesisDFS(left, right - 1, out + ')', res); 14         } 15     } 16 };

文章来源: 括号生成
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!