এই সমস্যাতে, আমাদের একটি বড় সংখ্যা N দেওয়া আছে। আমাদের কাজ হলো প্রদত্ত সংখ্যার সর্বোচ্চ ছোট পারমিউটেশন (permutation) বের করা।
উদাহরণ দিয়ে সমস্যা বোঝা যাক,
ইনপুট
N = 4529016
আউটপুট
1024569
সমাধানের পদ্ধতি
এই সমস্যার একটি সহজ সমাধান হলো লং ইন্টিজার মানটি স্ট্রিং-এ সংরক্ষণ করা। তারপর স্ট্রিংটি সর্ট করলে সেটিই আমাদের ফলাফল। কিন্তু যদি কোনো লিডিং জিরো (leading zero) থাকে, তবে সেগুলো প্রথম নন-জিরো মানের পরে সরিয়ে দিতে হবে।
সমাধান কোড:
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
string smallestNumPer(string s) {
int len = s.length();
sort(s.begin(), s.end());
int i = 0;
while (s[i] == '0')
i++;
swap(s[0], s[i]);
return s;
}
int main() {
string s = "4529016";
cout<<"The number is "<<s<<endl;
cout<<"The smallest permutation of the number is "<<smallestNumPer(s);
return 0;
}
আউটপুট
The number is 4529016 The smallest permutation of the number is 1024569