1 题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
2 思路和方法
因为要拼接int数字,所以这里面涉及到int越界问题,所以题目返回string;主要是制定比较算法来对数组进行排序, return a>b;//(从大到小)return a<b;(从小到大)。例如“3”和“123”,“3123”>“1233”,所以返回false。
如果两个数字m,n拼接成mn和nm,如果mn<nm,那么m应该排在n的前面,我们定义此时m小于n,如果mn=nm,我们定义m等于n。由于mn和nm的位数一定是相同的,因此比较它们的大小只需按照字符串大小的比较规则即可。
3 C++核心代码
1 class Solution { 2 public: 3 static bool cmp(int a,int b) 4 { 5 string A=to_string(a)+to_string(b); 6 string B=to_string(b)+to_string(a); 7 return A<B; 8 } 9 string PrintMinNumber(vector<int> numbers) { 10 int len = numbers.size(); 11 if(len==0) 12 return ""; 13 sort(numbers.begin(),numbers.end(),cmp); 14 string result=""; 15 for(int i=0;i<len;i++) 16 { 17 result+=to_string(numbers[i]); 18 } 19 return result; 20 } 21 };
参考资料
https://blog.csdn.net/sz793919425/article/details/98208092