मान लीजिए हमारे पास एक पूर्णांक n है। हमें 1 से n तक की संख्याओं को लेक्सिकोग्राफिक क्रम में वापस करना है। उदाहरण के लिए, जब 13 दिया जाता है, तो आउटपुट [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9] होगा।
हल करने के चरण
आकार n की एक सरणी ret परिभाषित करें
curr := 1
i को 0 से n-1 तक लूप करें
ret[i] := curr
यदि curr * 10 <= n, तो curr := curr * 10 सेट करें
अन्यथा
यदि curr >= n, तो curr := curr / 10
curr को 1 से बढ़ाएं
जब तक curr 10 से विभाज्य है, curr := curr / 10 करें
ret वापस करें
उदाहरण (C++)
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#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<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 += 1; while(curr % 10 == 0)curr/=10; } } return ret; } }; 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, ]