动态规划的方法需要考虑重复的组合,1位1位的考虑比较简单
class Solution {
public:vector<string> ans;
int num;
void solve(int pi,int num,int n,string &s){
if(num>2*n-pi+1)
return;
if(pi>2*n){
if(num==0)
ans.push_back(s);
return;
}
s += '(';
solve(pi+1,num+1,n,s);
s = s.substr(0,s.length()-1);
if(num>0){
s += ')';
solve(pi+1,num-1,n,s);
s = s.substr(0,s.length()-1);
}
}
vector<string> generateParenthesis(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ans.clear();
string s = "";
solve(1,0,n,s);
return ans;
}
};
本文介绍了一种使用动态规划思想生成合法括号组合的算法实现。通过递归地添加左括号和右括号,并确保在任何时刻右括号的数量不超过左括号的数量来构造合法的括号字符串。该方法有效地解决了生成所有可能的n对括号组合的问题。
1万+

被折叠的 条评论
为什么被折叠?



