直接解题需要将int数组中所有元素的排列都列出来,逐一比较。看到题目中给出了贪心的tag,所以一定能用更快的方法来做。选择用比较直接的类似冒泡排序的思路来做。即只两两比较int数组中元素所组成的数字,将大的往后放。

先将int数组中的元素使用to_string()方法存入string数组中。
使用二重循环遍历string数组,将当前元素与下一元素拼接为两个字符串,一个是当前元素在前,另一个是下一元素在前。将这两个拼接好的字符串使用atoi(str.c_str())转为int,比较这两个int的大小。若当前元素在前的int较大,则交换两个字符串在数组中的位置,即向上冒泡。
最后得到排好序的string数组,其中与其他字符串组成的数字小的字符串在前,大的在后。
最后只需按顺序将该字符串数组组成一个字符串即可。

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        string res = "";
        if(numbers.empty()){
            return res;
        }
        vector<string> strN(numbers.size());
        for(int i = 0;i < strN.size();i++){
            strN.at(i) = to_string(numbers.at(i));
        }
        for(int i = 0;i < strN.size() - 1;i++){
            for(int j = 0; j < strN.size() - i - 1;j++){
                string ab = strN.at(j) + strN . at(j + 1);
                string ba = strN.at(j + 1) + strN.at(j);
                int abn = atoi(ab.c_str());
                int ban = atoi(ba.c_str());
                if(abn > ban){
                    string temp = strN.at(j);
                    strN.at(j) = strN.at(j + 1);
                    strN.at(j + 1) = temp;
                }
            }
        }
        for(int i = 0;i < strN.size();i++){
            res += strN.at(i);
        }
        return res;
    }
};