১ থেকে n পর্যন্ত সংখ্যাগুলো লেক্সিকোগ্রাফিক্যাল (শব্দकोশের) ক্রমে সাজাতে হবে।
উদাহরণ: n = 13 হলে → [1,10,11,12,13,2,3,4,5,6,7,8,9]।
সমাধানের ধাপসমূহ
curr = 1দিয়ে শুরু করুন।- প্রতি ধাপে
currআউটপুটে যোগ করুন। - যদি
curr*10 <= nহয়,curr *= 10(গভীরে যান)। - অন্যথায়
curr++করুন এবং ১০ দিয়ে বিভাজ্য হলেcurr /= 10করুন (ব্যাকট্র্যাক)।
C++ উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v) {
cout << "[";
for (int x : v) cout << x << ", ";
cout << "]" << endl;
}
class Solution {
public:
vector<int> lexicalOrder(int n) {
vector<int> ret(n);
int curr = 1;
for (int i = 0; i < n; i++) {
ret[i] = curr;
if (curr * 10 <= n) curr *= 10;
else {
if (curr >= n) curr /= 10;
curr++;
while (curr % 10 == 0) curr /= 10;
}
}
return ret;
}
};
int main() {
Solution ob;
print_vector(ob.lexicalOrder(20));
}
ইনপুট
20
আউটপুট
[1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 3, 4, 5, 6, 7, 8, 9, ]