C++之括号合法问题(vector和stack)
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
static vector< vector<char> > result;
bool check(vector<char> s)
{
stack<char> x_stack;
for(int i = 0;i < s.size();i++){
if(s[i] == '('){
x_stack.push('(');
}
else{
if(x_stack.empty() == true){
return false;
}
else{
x_stack.pop();
}
}
}
return x_stack.size() == 0 ? true:false;
}
void print(vector<char> s)
{
for(int i = 0;i < s.size();i++){
cout << s[i];
}
cout << endl;
}
void dfs(int cnt,
int left_cnt,
int right_cnt,
vector<char> s)
{
if(s.size() == cnt){
if(check(s)){
print(s);
result.push_back(s);
}
}
else{
if(left_cnt > 0){
s.push_back('(');
left_cnt -= 1;
dfs(cnt,left_cnt,right_cnt,s);
left_cnt += 1;
s.pop_back();
}
if(right_cnt > 0){
s.push_back(')');
right_cnt -= 1;
dfs(cnt,left_cnt,right_cnt,s);
right_cnt += 1;
s.pop_back();
}
}
}
int main()
{
int cnt = 8;
int left_cnt = cnt / 2;
int right_cnt = cnt /2;
vector<char> s;
dfs(cnt, left_cnt, right_cnt, s);
cout << result.size();
system("pause");
return 0;
}