题目链接

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

分析:拼接乘最小数字,不能是比较数字的大小,例如:3<32<321,但是结果是由321  32 3拼接得到。所以应该比较拼接后的大小。 在此基础上,可以考虑减小空间复杂度,如果卡内存,可能会爆。

class Solution {
public:
    static bool cmp(const string& s1,const string& s2) {
        string a=s1+s2;
        string b=s2+s1;
        return a<b;
    }
    string PrintMinNumber(vector<int> numbers) {
        string res="";
        if(numbers.size()<=0) return res;
        vector<string>sNum;
        for(auto x:numbers) {
            stringstream ss;
            ss<<x;
            sNum.push_back(ss.str());
        }
        sort(sNum.begin(), sNum.end(), cmp);
        for(auto str:sNum) {
            res.append(str);
        }
        return res;
    }
};