生成2n个单括号(不要求合理)
#include<vector>
#include<string>
void generate(std::string item, int n, std::vector<std::string>& result)
{
if (item.size()==2*n)
{
result.push_back(item);
return;
}
generate(item + '(', n, result);
generate(item + ')', n, result);
}
int main()
{
std::vector<std::string> result;
generate("", 2, result);
for (unsigned int i = 0; i < result.size(); i++)
{
printf("%s\n",result[i].c_str());
}
return 0;
}
运行结果为:
((((
((()
(()(
(())
()((
()()
())(
()))
)(((
)(()
)()(
)())
))((
))()
)))(
))))
生成n组合理的括号。
#include<string>
#include<vector>
class Solution
{
public:
Solution() {};
~Solution() {};
std::vector<std::string> generateParenthesis(int n)
{
std::vector<std::string> result;
generate("",n,n,result);
return result;
}
void generate(std::string item, int left, int right, std::vector<std::string>& result)
{
if (left==0 && right==0)
{
result.push_back(item);
return;
}
if (left>0)
{
generate(item + '(', left - 1, right, result);
}
if (left<right)
{
generate(item + ')', left, right - 1, result);
}
}
};
int main()
{
Solution solve;
std::vector<std::string> result = solve.generateParenthesis(3);
for (unsigned int i = 0; i < result.size(); i++)
{
printf("%s\n",result[i].c_str());
}
return 0;
}
运行结果为
((()))
(()())
(())()
()(())
()()()