题解 | #括号生成#
括号生成
http://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca
class Solution {
public:
/**
*
* @param n int整型
* @return string字符串vector
*/
vector<string> generateParenthesis(int n) {
vector<string> res;
dfs(n, res, "", 0, 0);
return res;
// write code here
}
void dfs(int n, vector<string>& res, string s, int l, int r){
if(l<r || l>n || r>n) return;
if(l==n && r==n){
res.push_back(s);
return;
}
dfs(n, res, s+'(', l+1, r);
dfs(n, res, s+')', l, r+1);
}
};
DFS+少量的剪枝,剪枝的条件为:左括号的数目一旦小于右括号的数目,以及,左括号的数目和右括号数目均小于n。
查看23道真题和解析