22. 括号生成
22. 括号生成
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1 输出:["()"]
提示:
1 <= n <= 8
解析:
dfs即可
class Solution { public: int vis[2]; void dfs(int n, int k, string str, int flag, vector<string>& ret) { if(k == n * 2) { ret.push_back(str); return; } if(flag && vis[1]) { vis[1]--; dfs(n, k + 1, str + ')', flag - 1, ret); vis[1]++; } if(vis[0]) { vis[0]--; dfs(n, k + 1, str + '(', flag + 1, ret); vis[0]++; } } vector<string> generateParenthesis(int n) { vis[0] = n; vis[1] = n; vector<string> ret; dfs(n, 0, "", 0, ret); return ret; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。