题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组[3, 32, 321],则打印出这3个数字能排成的最小数字321323。
样例
输入:[3, 32, 321]
输出:321323
注意:输出数字的格式为字符串
分析:
分析一下样例,3,32,321,最高位相同,则比较次位,次位为空,比如3,则可将次位都视为3,所以排序后相当于321,323,333这样的有序序列。但是实际操作并不需要这样,对于a和b拼接的数,我们通过比较字符串ab和ba大小就可以确定哪个在前整个数最小。比如32132 < 32321,所以可以自定义这样的cmp函数对原数组排序后再输出即可。
注意:cmp函数前面之所以用static修饰是因为,这是交互式问题,在类的内部调用,不声明为静态的话,在调用cmp时只能通过this指针来调用了。
class Solution {
public:
static bool cmp(int a,int b){
string x = to_string(a),y = to_string(b);
return x + y < y + x;
}
string printMinNumber(vector<int>& nums) {
sort(nums.begin(),nums.end(),cmp);
string s = "";
for(auto x : nums) s += to_string(x);
return s;
}
};