题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解析:此题的精髓在与那个排序函数,可以得到较小的组合,最后从前往后加就是答案。
代码:
/*这个题目思路:可以将这个数组的元素看成每个字符串,然后对其进行排序,从小到大,所以最重要的是排序规则,所以排序规则为A B
当a+b<b+a的时候就返回a b,例如 31 2 231<312 所以返回2 31 这个排序的cmp很精髓*/
class Solution
{
public:
static bool cmp(int a,int b)
{
string A="",B="";
A += to_string(a);
A += to_string(b);
B += to_string(b);
B += to_string(a);
return A<B;
}
string PrintMinNumber(vector<int> numbers)
{
string ans = "";
int len = numbers.size();
if(len==0) return ans;
sort(numbers.begin(),numbers.end(),cmp);
for(int i=0;i<len;i++) ans += to_string(numbers[i]);
return ans;
}
};