把数组排成最小的数

你快乐吗?

Posted by bbkgl on September 26, 2019

把数组排成最小的数

C++,排序,cmp自定义排序规则。

这道题很有意思,其实和PAT甲级的一道题差不多。

首先把整数数组转化成字符串数组,然后在数组里对所有字符串进行排序。

排序的规则是:相邻两元素组成的数字要达到最小。

也就是说比较数组[a, b]中是否a + b < b + a,满足这个规则,整个数组连成的字符串就能达到最小。

class Solution {
public:
    static bool cmp(string a, string b) {
        if (a + b < b + a)
            return true;
        else return false;
    }
    
    string PrintMinNumber(vector<int> numbers) {
        vector<string> ss;
        char num[10];
        string ans;
        for (int &it : numbers) {
            sprintf(num, "%d", it);
            ss.push_back(string(num));
        }
        sort(ss.begin(), ss.end(), cmp);
        for (string &it : ss)
            ans += it;
        return ans;
    }
};