题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
题解:
这与PAT中最小排列组合是同理的,为了防止新组成的数字溢出,全部转化为字符串操作。
1 class Solution { 2 public: 3 string PrintMinNumber(vector<int> numbers) { 4 if (numbers.size() == 0)return ""; 5 vector<string>v; 6 for (auto a : numbers) 7 v.push_back(to_string(a)); 8 sort(v.begin(), v.end(), [](string a, string b) {return a + b < b + a; }); 9 string res = ""; 10 for (auto s : v) 11 res += s; 12 while (res.size() > 0 && res[0] == '0') 13 res.erase(0, 1); 14 return res; 15 } 16 };