मान लीजिए हमारे पास एक संख्या n है। जैसा कि हम जानते हैं, एक ब्रैकेट अनुक्रम एक स्ट्रिंग है जिसमें केवल वर्ण "(" और ")" होते हैं। एक वैध ब्रैकेट अनुक्रम एक ब्रैकेट अनुक्रम है जिसे मूल अनुक्रम के वर्णों के बीच "1" और "+" वर्ण डालकर एक सही अंकगणितीय अभिव्यक्ति में बदला जा सकता है। इसलिए, यदि ब्रैकेट अनुक्रम "()()" की तरह है, तो यह वैध है क्योंकि हम 1 डाल सकते हैं जैसे "(1)+(1)"। संख्या n से, हमें लंबाई 2n के ठीक n अलग-अलग संभावित वैध ब्रैकेट अनुक्रम ढूंढने हैं।
उदाहरण के लिए, यदि इनपुट n = 4 है, तो आउटपुट ["()()()()", "(())()()", "((()))()", "(((())))"] होगा।
चरण
इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:
k := 1 से n तक, करें: i := 1 से k तक, करें: "(" प्रिंट करें i := 1 से k तक, करें: ")" प्रिंट करें i := k + 1 से n तक, करें: "()" प्रिंट करें अगली पंक्ति पर जाएं उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#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
आउटपुट
()()()() (())()() ((()))() (((())))