올바른 대괄호 시퀀스의 생성은 검사가 수행되는 방식에서 직접 따릅니다. 정확성을 위반하지 않고 새 대괄호를 추가하기만 하면 됩니다. 이것은 재귀 반복에 의해 수행됩니다. 당신이 그를 모른다면 - BE ... 아, 아니, 더 읽어서 이해하려고 노력할 수 있습니다. 다음은 한 유형의 대괄호에 대한 코드 샘플입니다.
#include <벡터>
#include <iostream>
사용 네임스페이스 std;
정수 n; // 절반 길이
벡터<문자> 답변 // 우리의 대답
무효 rec(int 잔액) {
if (ans.size() == 2 * n) { // 만약 그렇다면, 우리는 완료 < /span>
for (int i = 0; i < 2 * n; i++)
cout << ans[i] << " ";
cout << "\n";
}
if (ans.size() + balance + 2 <= n * 2) { // 확인합니다. 새 여는 중괄호를 닫도록 하겠습니다
// 이제 손을 조심하세요: 각 시퀀스에 대해 별도의 벡터를 만들 필요가 없습니다
ans.push_back('(');
rec(잔액 + 1);
ans.pop_back(); // 이를 이해하려면 재귀에 대해 알아야 합니다. 먼저 벡터에 괄호를 추가한 다음 이 모든 코드를 다시 실행합니다. 스팬>
// 즉, 가능하면 괄호를 다시 추가합니다. 스팬>
// 이것은 재귀를 종료하기 시작할 때까지, 즉 원하는 길이에 도달할 때까지 발생합니다. 스팬>
// 그러면 괄호가 제거되기 시작합니다. 당신이 이것을 이해한다면-축하합니다. 당신은 굉장합니다. 스팬>
}
if (balance > 0) { // 괄호를 닫을 수 있으면 닫습니다. 스팬>
ans.push_back(')');
rec(균형 - 1);
ans.pop_back();
}
}
int 메인()
{
cin>> N;
rec(0);
반품 0;
}
그리고 이제 어려움의 시간입니다. 여러 유형의 괄호에 대한 알고리즘을 직접 작성해야 합니다! 무아하하하하하하하하하!