数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合
思路:
剩下的括号要么在这一组新增的括号内部,要么在这一组新增括号的外部(右侧)。(左侧都可以认为是重复的)
对所有情况进行遍历:
"(" + 【i=p时所有括号的排列组合】 + ")" + 【i=q时所有括号的排列组合】
其中 p + q = n-1,且 p q 均为非负整数。
class Solution {
public:
vector<string> generateParenthesis(int n) {
//vector<vector<string>> dp; 错
vector<vector<string>> dp(n+1);
dp[0].push_back("");
dp[1].push_back("()");
if (n == 1)
return dp[1];
for (int i = 2; i <= n; i++) {
for (int p = 0; p < i; p++) {
for (int k = 0; k < dp[p].size(); k++) {
int q = i - 1 - p;
for (int m = 0; m < dp[q].size(); m++) {
string s1 = "(" + dp[p][k] + ")" + dp[q][m];
dp[i].push_back(s1);
}
}
}
}
return dp[n];
}
};