题目描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
示例 2:
输入:n = 1
输出:[“()”]
提示:
1 <= n <= 8
解题思路
本题就是一个枚举的过程。
和之前17题一样,dfs进行枚举。不过这个要判断括号是否是合法的——左括号的个数一直小于等于右括号的个数就是合法,只要有一个过程不满足就是错误的。
代码
class Solution { vector<string> ret; public: vector<string> generateParenthesis(int n) { dfs(n,n,""); return ret; } void dfs(int l,int r,string s) { if(l>r||l<0||r<0) return; if(l==r&&l==0) { ret.push_back(s); return; } //先加左 dfs(l-1,r,s+'('); //再加右 dfs(l,r-1,s+')'); } };