คำอธิบายปัญหา
สมมติว่าเรามีตัวเลข n ลำดับวงเล็บคือสตริงที่มีเฉพาะ '(' และ ')' ลำดับวงเล็บที่ถูกต้องคือลำดับที่สามารถแปลงเป็นนิพจน์คณิตศาสตร์ที่ถูกต้องได้โดยแทรก '1' และ '+' ระหว่างตัวอักษร ตัวอย่าง "()()" ถูกต้องเพราะกลายเป็น "(1)+(1)" จาก n ต้องการหาลำดับวงเล็บที่ถูกต้อง n ลำดับที่มีความยาว 2n และต่างกันทั้งหมด
ตัวอย่าง: n = 4 ผลลัพธ์คือ ["()()()()", "(())()()", "((()))()", "(((())))"]
ขั้นตอนการแก้ปัญหา
สำหรับ k := 1 ถึง n:
สำหรับ i := 1 ถึง k: พิมพ์ "("
สำหรับ i := 1 ถึง k: พิมพ์ ")"
สำหรับ i := k+1 ถึง n: พิมพ์ "()"
ขึ้นบรรทัดใหม่
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
void solve(int n) {
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= k; i++)
cout << "(";
for (int i = 1; i <= k; i++)
cout << ")";
for (int i = k + 1; i <= n; i++)
cout << "()";
cout << endl;
}
}
int main() {
int n = 4;
solve(n);
}
อินพุต
4
เอาต์พุต
()()()() (())()() ((()))() (((())))