把数组排成最小的数
把数组排成最小的数
https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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;
}
};