22. 括号生成
思路:
最终的字符串肯定是 n个'(', n个 ')' 。
所以'('个数小于n,才可以添加'(';
‘(’个数大于')',才可以添加')'。
‘(’个数等于 n,并且')'个数等于 n,递归终止,且该结果一定是正确结果。
递归过程中不会出现'('或')'个数大于n的情况。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> v;
generate("", n, n, v);
return v;
}
void generate(string item, int lef, int rig, vector<string> &v)
{
if(lef==0&&rig==0)
{
v.push_back(item);
return;
}
if(lef>0) // +( 左括号剩余数-1
generate(item+'(', lef-1,rig,v);
if(lef<rig) // +) 右括号剩余数-1
generate(item+')', lef,rig-1,v);
}
};
没思路时不妨理一下可能的状况,哪些状况是合理的,可以用代码约束的。
参考自:https://www.bilibili.com/video/BV19J411E7ft?from=search&seid=7281370434236405070
网友评论