ধরুন আমরা (নিম্ন এবং উচ্চ) পরিসরে বিদ্যমান মোট স্ট্রোবোগ্রাম্যাটিক সংখ্যা গণনা করার জন্য একটি ফাংশন সংজ্ঞায়িত করতে চাই। আমরা জানি যে স্ট্রোবোগ্রাম্যাটিক সংখ্যা হল এমন একটি সংখ্যা যা 180 ডিগ্রি ঘোরার সময় একই রকম দেখায়।
সুতরাং, যদি ইনপুট নিম্ন ="50", উচ্চ ="100" এর মত হয়, তাহলে আউটপুট 3 হবে কারণ তিনটি ফলাফল আছে, 69, 88 এবং 96৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন সংজ্ঞায়িত করুন findStrobogrammatic(), এটি n,
লাগবে -
একটি অ্যারে ret সংজ্ঞায়িত করুন
-
যদি n &1 অ-শূন্য হয়, তাহলে −
-
ret এর শেষে "0" ঢোকান
-
ret এর শেষে "1" সন্নিবেশ করুন
-
ret এর শেষে "8" ঢোকান
-
-
অন্যথায়
-
ret এর শেষে ফাঁকা স্ট্রিং ঢোকান
-
-
n> 1 এর জন্য, n :=n - 2 আপডেট করুন, −
করুন-
একটি অ্যারের তাপমাত্রা সংজ্ঞায়িত করুন
-
আরম্ভ করার জন্য i :=0, যখন i
-
s :=ret[i]
-
যদি n> 3 হয়, তাহলে −
-
টেম্পের শেষে "0" + s + "0" ঢোকান
-
-
টেম্পের শেষে "1" + s + "1" ঢোকান
-
টেম্পের শেষে "8" + s + "8" সন্নিবেশ করুন
-
টেম্পের শেষে "6" + s + "9" ঢোকান
-
টেম্পের শেষে "9" + s + "6" ঢোকান
-
-
ret :=temp
-
-
রিটার্ন রিটার্ন
-
প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
-
ret :=0
-
একটি অ্যারে v
সংজ্ঞায়িত করুন -
ইনিশিয়ালাইজ করার জন্য i :=কম সাইজ, যখন i <=সাইজ বেশি, আপডেট করুন (i 1 দ্বারা বাড়ান), করবেন −
-
v :=findStrobogrammatic(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