题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
示例1
输入
[3,32,321]
返回值
"321323"
思路
1.这题有两种做法,一种暴力做法,即全排列后一一比较。另一种是贪心做法,设定排序规则:对于字符串s1和s2,当s1+s2<s2+s1,将s1排在s2前。
2.做这题时暴露了我字符串函数不熟练的问题,因此特地记下此题。
3.数字转字符串用to_string();
4.排序函数中的排序规则可以简易写。
code
class Solution { public: string PrintMinNumber(vector<int> numbers) { vector<string> strs; for(auto i:numbers) strs.push_back(to_string(i)); sort(strs.begin(),strs.end(),[](string a,string b){ return a+b<b+a; }); string res; for(auto s:strs)res+=s; return res; } };