मान लीजिए हमारे पास लंबाई n है। हमें उन सभी स्ट्रोबोग्रामेटिक नंबर्स को ढूंढना है जिनकी लंबाई n है।
जैसा कि हम जानते हैं कि एक स्ट्रोबोग्रामेटिक नंबर वह संख्या है जो 180 डिग्री घुमाने पर समान दिखती है।
इसलिए, यदि इनपुट है n = 2, तो आउटपुट होगा ["11","69","88","96"]
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
एक ऐरे ret परिभाषित करें
यदि n विषम है, तो -
"0" को ret के अंत में डालें
"1" को ret के अंत में डालें
"8" को ret के अंत में डालें
अन्यथा
खाली स्ट्रिंग को ret के अंत में डालें
n > 1 के लिए, n := n - 2 अपडेट करते हुए, करें -
एक ऐरे temp परिभाषित करें
i := 0 से शुरू करें, जब i < ret का आकार, i बढ़ाते हुए, करें -
s := ret[i]
यदि n > 3, तो -
"0" + s + "0" को temp के अंत में डालें
"1" + s + "1" को temp के अंत में डालें
"8" + s + "8" को temp के अंत में डालें
"6" + s + "9" को temp के अंत में डालें
"9" + s + "6" को temp के अंत में डालें
ret := temp
ret लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<string> findStrobogrammatic(int n) { vector<string> ret; if (n & 1) { ret.push_back("0"); ret.push_back("1"); ret.push_back("8"); } else { ret.push_back(""); } for (; n > 1; n -= 2) { vector<string> temp; for (int i = 0; i < ret.size(); i++) { string s = ret[i]; if (n > 3) { temp.push_back("0" + s + "0"); } temp.push_back("1" + s + "1"); temp.push_back("8" + s + "8"); temp.push_back("6" + s + "9"); temp.push_back("9" + s + "6"); } ret = temp; } return ret; } }; main(){ Solution ob; print_vector(ob.findStrobogrammatic(3)); }इनपुट
3
आउटपुट
[101, 808, 609, 906, 111, 818, 619, 916, 181, 888, 689, 986, ]