正确的括号序列的生成直接来自检查完成的方式——我们只需要添加新的括号而不违反正确性。这是通过递归迭代完成的。如果你不认识他——是……啊,不,你可以通过进一步阅读来尝试理解。下面是一种括号的代码示例:
#include
#include
使用 命名空间 std;
int n; //半长
矢量<字符>答; // 我们的答案
void rec(int 余额) {
if (ans.size() == 2 * n) { // 如果是,那么我们完成了
for (int i = 0; i < 2 * n; i++)
输出 <<回答[我] << ” ";
输出 << "\n";
}
if (ans.size() + balance + 2 <= n * 2) { // 检查,我们''ll make it do we clos the new opening brace
// 注意你的手:我们不需要为每个序列制作一个单独的向量
ans.push_back('(');
记录(余额+ 1);
ans.pop_back(); // 要理解这一点,你需要了解递归。首先,我们向向量添加一个括号,然后再次执行所有这些代码。
// 也就是再加一个括号,如果可以的话。
// 这种情况会发生,直到我们开始离开递归——也就是说,直到我们达到所需的长度。
// 然后开始去掉括号。如果你明白这一点——恭喜你,你真棒。
}
if (balance > 0) { // 如果我们可以关闭一个括号,我们就关闭它。
ans.push_back(')');
记录(余额 - 1);
ans.pop_back();
}
}
int main()
{
辛>>名词;
记录(0);
返回 0;
}
现在是困难时期 - 您将不得不自己编写几种类型的括号的算法!哈哈哈哈哈哈哈哈哈!