কম্পিউটার টিউটোরিয়াল

C++-এ লেক্সিকোগ্রাফিক্যাল নম্বর


১ থেকে 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, ]
  1. সি++-এ ইকুইডিজিটাল নম্বর

  2. সি++-এ এমিরপ নম্বর

  3. সি++-এ ডাডেনি নম্বর

  4. C++-এ Largest BST Subtree: বাইনারি ট্রিতে সর্বোচ্চ BST সাবট্রি খুঁজে বের করা