题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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;
    }
};