[剑指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 };
原文地址:https://www.cnblogs.com/lca1826/p/6509555.html