मान लीजिए कि हम (निम्न और उच्च) की सीमा में मौजूद कुल स्ट्रोबोग्रामेटिक संख्याओं की गणना करने के लिए एक फ़ंक्शन को परिभाषित करना चाहते हैं। जैसा कि हम जानते हैं कि एक स्ट्रोबोग्रामेटिक संख्या एक संख्या है जो 180 डिग्री घुमाए जाने पर समान दिखती है।
इसलिए, यदि इनपुट निम्न ="50", उच्च ="100" जैसा है, तो आउटपुट 3 होगा, क्योंकि तीन परिणाम हैं, 69, 88, और 96।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फ़ंक्शन को परिभाषित करें findStrobogrammatic(), इसमें n लगेगा,
-
एक सरणी रिट परिभाषित करें
-
अगर n और 1 गैर-शून्य है, तो -
-
रिट के अंत में "0" डालें
-
रिट के अंत में "1" डालें
-
रिट के अंत में "8" डालें
-
-
अन्यथा
-
रिट के अंत में रिक्त स्ट्रिंग डालें
-
-
n> 1 के लिए, n अपडेट करें:=n - 2, करें −
-
एक सरणी अस्थायी परिभाषित करें
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
एस:=सेवानिवृत्त [i]
-
यदि n> 3, तो -
-
अस्थायी के अंत में "0" + s + "0" डालें
-
-
अस्थायी के अंत में "1" + s + "1" डालें
-
अस्थायी के अंत में "8" + s + "8" डालें
-
अस्थायी के अंत में "6" + s + "9" डालें
-
अस्थायी के अंत में "9" + s + "6" डालें
-
-
रिट:=अस्थायी
-
-
वापसी रिट
-
मुख्य विधि से, निम्न कार्य करें -
-
रिट:=0
-
सरणी को परिभाषित करें v
-
इनिशियलाइज़ i के लिए:=कम का आकार, जब मैं <=उच्च का आकार, अद्यतन (i 1 से बढ़ाएँ), करें -
-
v :=ढूढें स्ट्रोबोग्राममैटिक(i)
-
इनिशियलाइज़ j :=0 के लिए, जब j
-
ret :=ret + (1 जब v[j] की लंबाई> निम्न की लंबाई और उच्च की लंबाई> v[j] की लंबाई)
-
-
-
वापसी रिट
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h>
using namespace std;
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;
}
bool compare(string a, string b){
return a.size() == b.size() ? a >= b : a.size() > b.size();
}
int strobogrammaticInRange(string low, string high) {
int ret = 0;
vector<string> v;
for (int i = low.size(); i <= high.size(); i++) {
v = findStrobogrammatic(i);
for (int j = 0; j < v.size(); j++) {
ret += compare(v[j], low) && compare(high, v[j]);
}
}
return ret;
}
};
main(){
Solution ob;
cout <<(ob.strobogrammaticInRange("50", "100"));
} इनपुट
"50","100"
आउटपुट
3