मान लीजिए कि हमारी लंबाई n है। हमें n लंबाई की सभी स्ट्रोबोग्रामेटिक संख्याएं ढूंढनी होंगी।
जैसा कि हम जानते हैं कि एक स्ट्रोबोग्रामेटिक संख्या एक संख्या है जो 180 डिग्री घुमाए जाने पर समान दिखती है।
इसलिए, यदि इनपुट n =2 जैसा है, तो आउटपुट ["11", "69", "88", "96"]
होगाइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक सरणी रिट परिभाषित करें
-
यदि n विषम है, तो -
-
रिट के अंत में "0" डालें
-
रिट के अंत में "1" डालें
-
रिट के अंत में "8" डालें
-
-
अन्यथा
-
रिट के अंत में रिक्त स्ट्रिंग डालें
-
-
n> 1 के लिए, n अपडेट करें:=n - 2, करें −
-
एक सरणी अस्थायी परिभाषित करें
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
एस:=सेवानिवृत्त [i]
-
यदि n> 3, तो -
-
टेम्परेचर के अंत में "0" कॉन्टेनेट का कॉन्टेनेट "0" डालें
-
-
टेम्परेचर के अंत में "1" कॉन्टेनेट का कॉन्टेनेट "1" डालें
-
टेम्परेचर के अंत में "8" कॉन्टेनेट का कॉन्टेनेट "8" डालें
-
टेंपरेचर के अंत में "6" कॉन्टेनेट का कॉन्टेनेट "9" डालें
-
टेम्परेचर के अंत में "9" कॉन्टेनेट का कॉन्टेनेट "6" डालें
-
-
रिट:=अस्थायी
-
-
वापसी रिट
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#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, ]