1. 程式人生 > >【劍指Offer】把陣列排成最小的數

【劍指Offer】把陣列排成最小的數

題目連結

題目描述

輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{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;
    }
};