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