题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
将数组中的数字连接起来,排成一个最小的数字。将’大数’往后放’小数’往前放,如何定义’大数’和’小数’?比如说有两个数a和b,如果ab>ba则a是’大数’b是’小数’,要排成ba。
于是,这道题目变成了一个排序问题,将能把组合出来的数字变大的数字往后排。我们这里需要自己定义一个比大小的比较方法。用冒泡排序,可以解决此题。
class Solution {
public:string PrintMinNumber(vector<int> nums) {auto compare &#61; [](string sa, string sb){return sa&#43;sb < sb&#43;sa;};vector<string> tmp;for(int n : nums){tmp.push_back(to_string(n));}sort(tmp.begin(), tmp.end(), compare);string ans &#61; "";for(string s : tmp) ans &#43;&#61; s;return ans;}
};