题解 | #括号生成#
括号生成
http://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca
递归求解
此题想法就是从空字符串开始先填一个 "(",然后下一个可以是 "(" 或者 ")",当然每有一个 "(" 时,后面都需要对应一个 ")" ,依次往后填充即可。
// 这一句就是限制有一个"("时,后面必然会填充一个")"
if(left<right) dfs(str+")",left,right-1,ret);
// 这一句可以保证先填充"(",并且可以多次填充"("
if(left>0) dfs(str+"(",left-1,right,ret);
完整代码:
class Solution {
public:
/**
*
* @param n int整型
* @return string字符串vector
*/
vector<string> generateParenthesis(int n) {
// write code here
vector<string> ret;
dfs("",n,n,ret);
return ret;
}
void dfs(string str,int left,int right, vector<string>& ret){
if(left==0 && right==0){
ret.push_back(str);
return;
}
if(left<right) dfs(str+")",left,right-1,ret);
if(left>0) dfs(str+"(",left-1,right,ret);
}
};