[剑指Offer] 32.把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
【思路】
·先将整型数组转换成string数组,然后将string数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。
·排序规则如下:
·若ab > ba,则a > b;若ab < ba,则a < b;若ab = ba,则a = b(比如"3"<"31",但"331">"313",所以要将两个字符串连起来比较)
1 #include <sstream> 2 class Solution 3 { 4 public: 5 static bool compare(string a,string b) 6 { 7 string str1 = a + b; 8 string str2 = b + a; 9 return (str1 < str2) ? true : false; 10 } 11 string PrintMinNumber(vector<int> numbers) 12 { 13 string res = ""; 14 if(numbers.size() == 0) 15 return res; 16 vector<string> s; 17 //将整数数组转化成字符串数组 18 for(int i = 0; i < numbers.size(); i ++) 19 { 20 stringstream ss; 21 ss << numbers[i]; 22 s.push_back(ss.str()); 23 } 24 sort(s.begin(),s.end(),compare); 25 for(int i = 0;i < s.size();i ++) 26 res += s[i]; 27 return res; 28 } 29 };