22. 括号生成 - 力扣(LeetCode)
class Solution {
public:
vector<string> generateParenthesis(int n) {
if (n == 0) return {};
if (n == 1) return { "()" };
vector<vector<string>> dp(n+1);
dp[0] = { "" };
dp[1] = { "()" };
for (int i = 2; i <= n; i++) {
for (int j = 0; j <i; j++) {
for (string p : dp[j])
for (string q : dp[i - j - 1]) {
string str = "(" + p + ")" + q;
dp[i].push_back(str);
}
}
}
return dp[n];
}
};
#include <bits/stdc++.h>
using namespace std;
vector<string> generateParenthesis(int n)
{
//记录结果
vector<vector<string>> dp(n+1);
if (n == 0) return {};
if (n == 1) return { "()" };
dp[0]={""};
dp[1]={"()"};
for(int i=2;i<=n;i++)
{
//p+q=i-1
for(int j=0;j<i;j++)
{
//q=i+1-p;
//前后两部分
for (string p : dp[j])
for (string q : dp[i - j - 1])
{
string str = "(" + p + ")" + q;
dp[i].push_back(str);
}
}
}
return dp[n];
}
int main(){
int n;
cin>>n;
vector<string>res;
res=generateParenthesis(n);
for(string r:res)
{
cout<<r<<endl;
}
return 0;
}