剑指offer之【把数组排成最小的数】☆
题目:
把数组排成最小的数
链接;
https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&tqId=11185&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
首先是数字转化成字符串,然后进行一个字典序的排序,最后把字符串链接起来
代码:
1 class Solution { 2 public: 3 string PrintMinNumber(vector<int> numbers){ 4 int len = numbers.size(); 5 if(len <= 0) 6 return res; 7 vector<string> snums; 8 for(int x:numbers){ // 将数字转换为字符串 9 stringstream ss; 10 ss << x; 11 snums.push_back(ss.str()); 12 } 13 sort(snums.begin(),snums.end(),compare); // 字典序排序 14 15 for(auto it = snums.begin();it != snums.end();++it){ // 字符串链接起来 16 res.append(*it); 17 } 18 return res; 19 } 20 static bool compare(const string &str1, const string &str2){ 21 string s1 = str1+str2; 22 string s2 = str2+str1; 23 return s1 < s2; 24 } 25 private: 26 string res; 27 };