AcWing 58. 把数组排成最小的数

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

例如输入数组[3, 32, 321],则打印出这3个数字能排成的最小数字321323。

样例

输入:[3, 32, 321]

输出:321323

注意:输出数字的格式为字符串。

问题分析 

我们对数组进行排序,这个排序需要我们自定义排序规则,就是当s1 + s2的字典序小于s2 + s1的字典序时,我们把s1排在s2的前面。按照这个规则自定义cmp函数对数组进行排序,然后我们把数组从前往后依次加起来,最后返回得到的字符串ans。

代码实现

class Solution {
public:
    string printMinNumber(vector<int>& nums) {
        string ans;
        sort(nums.begin(), nums.end(), cmp);
        for(int i : nums)
            ans += to_string(i);
        return ans;
    }
    
    static bool cmp(int i1, int i2){
        string s1 = to_string(i1);
        string s2 = to_string(i2);
        return s1 + s2 < s2 + s1;
    }
};

猜你喜欢

转载自blog.csdn.net/mengyujia1234/article/details/90038850
今日推荐