DFS
class Solution {
public:
void dfs(string cur,int left,int right,vector<string>& res){ / 勿忘&
if(left==0&&right==0){
res.push_back(cur);
return;
}
if(left>right) return;
if(left>0) dfs(cur+"(",left-1,right,res);
if(right>0) dfs(cur+")",left,right-1,res);
}
vector<string> generateParenthesis(int n) {
vector<string> res;
if(n==0) return res;
dfs("",n,n,res);
return res;
}
};
BFS
队列模拟系统栈
class Solution {
public:
struct Node{
string str;
int left;
int right;
Node(string s,int left,int right):str(s),left(left),right(right){}
};
vector<string> generateParenthesis(int n) {
vector<string> res;
queue<Node> q;
q.push(Node("",n,n));
while(!q.empty()){
Node node=q.front();
q.pop();
if(node.left==0&&node.right==0){
res.push_back(node.str);
continue;
}
if(node.left>node.right) continue;
if(node.left>0) q.push(Node(node.str+"(",node.left-1,node.right));
if(node.right>0) q.push(Node(node.str+")",node.left,node.right-1));
}
return res;
}
};
动态规划
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<vector<string>> v(n+1);
v[0].push_back("");
for(int i = 1; i <= n; i++){
for(int j = 0; j < i; j++){
for(string &str1 : v[j]){
for(string &str2 : v[i-j-1])
v[i].push_back("(" + str2 + ")" + str1);
}
}
}
return v[n];
}
};