面试题45:把数组排成最小的数

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

这个题的难点与创新点在于构造出了我们需要的比较大小的方法,具体看代码中。要注意的几点:

cmp函数要定义成static成员函数,不然会报错。
比较大小的方法和string类型拼接的方法
程序开始之前判断输入是否为空,若为空返回空的string

代码:

class Solution {
public:
    /*
    定义大小规则:若两个数m和n,组合出来的mn和nm。若mn小于nm,则应输出mn,此时定义m<n;若mn大于nm,则应输出nm,此时定义n<m;若mn=nm,输出其中之一,此时定义n=m。
    具体步骤:
    1.先将int型数字都换成string类型存储在数组中;
    2.定义string类型的比较函数,比较类型拼接直接用'+'即可;
    3.sort函数给string数组由小到大排序,并将结果拼接输出。
    */
    static bool cmp(string &m, string &n)
    {
        return m + n < n + m;
    }

    string PrintMinNumber(vector<int> numbers)
    {
        string result;
        if(numbers.size()<=0)
            return result;
        vector<string> strNumbers;
        for (int i = 0; i < numbers.size(); ++i)
        {
            strNumbers.push_back(to_string(numbers[i]));
        }
        sort(strNumbers.begin(), strNumbers.end(),cmp);
        for (int i = 0; i < strNumbers.size(); ++i)
        {
            result += strNumbers[i];
        }
        return result;
    }
};
全部评论

相关推荐

11-15 19:28
已编辑
蚌埠坦克学院 硬件开发
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务