把数组排成最小的数★★★
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
开始自己在想的时候,也试着将两个字符串比如321和32进行比较,发现32132比32321小,还在思考321放在前面和32放在前面怎么判断大小~~~ o(╯□╰)o  这脑子~~~~
只需要自定义排序规则即可,将所有的数字按照A+B < B+A的排序规则排序,那么最前面的就是跟其他字符串拼起来最小的。整个自定义有序的拼起来就是最后的结果。
class Solution {
public:
  //自定义排序规则
    static bool cmp(string str1, string str2){
        string str12 = str1 + str2;
        string str21 = str2 + str1;
        return str12 < str21;
    }
    string PrintMinNumber(vector<int> numbers) {
        vector<string>str;
        for(int i = 0; i < numbers.size(); i++){
            strstream ss;
            string tmpstr;
            ss << numbers[i];
            ss>>tmpstr;
            str.push_back(tmpstr);
        }
        sort(str.begin(), str.end(), cmp);
        string resstr;
        for(int i = 0; i < str.size(); i++){
            resstr.append(str[i]);
        }
        return resstr;
    }
};
    学学学    练练练    刷刷刷
                    
                
                
            
        
浙公网安备 33010602011771号