把數組排成最小的數

題目描述

輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。

/*
 * 解題思路:
 * 先將整型數組轉換成String數組,然後將String數組排序,最後將排好序的字符串數組拼接出來。關鍵就是制定排序規則。
 * 排序規則如下:
 * 若ab > ba 則 a > b,
 * 若ab < ba 則 a < b,
 * 若ab = ba 則 a = b;
 * 解釋說明:
 * 比如 "3" < "31"但是 "331" > "313",所以要將二者拼接起來進行比較
*/
class Solution {
public:
    static bool compare(const string& s1,const string& s2)
    {
        string comb_str1=s1+s2;
        string comb_str2=s2+s1;
        return comb_str1<comb_str2;
    }
    string PrintMinNumber(vector<int> numbers) {
        string res;
        int len=numbers.size();
        if(len<=0) return res;
        
        vector<string> vstr;
        for(int i=0;i<len;i++)
            vstr.push_back(to_string(numbers[i]));
        
        sort(vstr.begin(),vstr.end(),compare);
        
        int vlen=vstr.size();
        for(int i=0;i<vlen;i++)
            res+=vstr[i];
        
        return res;
        
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章