题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
分析:
排序的变形。
自定义比较函数:
比较3和32:
将3和32拼接在一起为332,将32和3拼接在一起为323,比较这两个数的大小332>323,那么32应该排在3的前面。
其他数类似。。
代码:
1 class Solution { 2 public: 3 string PrintMinNumber(vector<int> numbers) { 4 int numSize = numbers.size(); 5 string s; 6 if(numSize == 0) return s; 7 sort(numbers.begin(), numbers.end(), cmp); 8 for(int i = 0; i < numSize; i++) { 9 s += to_string(numbers[i]); 10 } 11 return s; 12 } 13 static bool cmp(int a, int b) { 14 string a2s = to_string(a); 15 string b2s = to_string(b); 16 string s1 = a2s + b2s; 17 string s2 = b2s + a2s; 18 return s1 < s2; 19 } 20 };