ในปัญหานี้ เราได้รับตัวเลขขนาดใหญ่ N งานของเราคือหาการเรียงสับเปลี่ยนที่น้อยที่สุดของตัวเลขที่กำหนด
มาดูตัวอย่างเพื่อเข้าใจปัญหา
Input
N = 4529016
Output
1024569
วิธีแก้ปัญหา
วิธีแก้ที่ง่ายคือเก็บค่าจำนวนเต็มยาวลงในสตริง จากนั้นเราจะเรียงลำดับสตริงซึ่งเป็นผลลัพธ์ของเรา แต่ถ้ามีศูนย์นำหน้า เราจะเลื่อนมันไปหลังค่าที่ไม่ใช่ศูนย์ตัวแรก
โปรแกรมแสดงการทำงานของวิธีแก้
ตัวอย่าง
#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