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