1,题目要求
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
2,题目思路
对于这道题,要求将数组中所有的数字排列成一个最小的数字。
在进行字符的排序和选择上,我们可以定义一个比较规则:
对于s1和s2,如果s1+s2 < s2+s1,就返回true。换句话说,排序按照使得两个字符串相加较小的次序进行排列。
3,代码实现
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
vector<string> sortedNums;
for(auto &i : numbers)
sortedNums.push_back(to_string(i));
sort(sortedNums.begin(), sortedNums.end(), [](string &s1, string &s2){return s1+s2 <s2+s1;});
string res = "";
for(auto &s : sortedNums)
res += s;
return res;
}
};