其实就是一个排列问题,唯一的区别是,需要注意右括号的数量不能超过左括号。
#include <string>
void BracesHelper(int left, int right, int cur, int size,std::string output)
{
if(size == right)
{
printf("%s",0,output.c_str());
return;
}
for(int i = cur; i < size; ++i)
{
output.append("( ");
left++;
if(left < size)
{
BracesHelper(left,right,i + 1,size,output);
}
if(left >= right)
{
output.append(") ");
right++;
BracesHelper(left,right,i + 1,size,output);
}
}
}
void Braces(int N)
{
std::string output;
BracesHelper(0,0,0,N,output);
}