#面试题# 左“{”,右”}"括号各N个,请打印出所有正确的组合,比如当N=3,{}{}{},{{{}}},等为正确的组合。如果写的代码是recursive,能否用iterative再写一个;反之亦然。
这里先写一个递归的解法
void doMatch(int totalNum, vector<char> &brackets, int leftNum, int rightNum)
{
if (leftNum == totalNum && rightNum == totalNum) {
for (vector<char>::const_iterator it = brackets.begin(); it != brackets.end(); ++it)
cout << *it;
cout <<endl;
}
if (leftNum < totalNum) {
brackets.push_back('{');
doMatch(totalNum, brackets, leftNum + 1, rightNum);
brackets.pop_back();
}
if (rightNum < leftNum) {
brackets.push_back('}');
doMatch(totalNum, brackets, leftNum, rightNum + 1);
brackets.pop_back();
}
}