题解 | #把数组排成最小的数#

把数组排成最小的数

http://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
       sort(numbers.begin(),numbers.end(),[](const auto &a,const auto &b)
            {
                vector<int> anum;
                vector<int> bnum;
                int numa=a,numb=b;
                while(numa)
                {
                    anum.push_back(numa%10);//按位数从小到大排序
                    numa/=10;
                }
                //reverse(anum.begin(), anum.end());//按位数高到低排序
                while(numb)
                {
                    bnum.push_back(numb%10);//按位数从小到大排序
                    numb/=10;
                }
                //reverse(bnum.begin(), bnum.end());//按位数高到低排序
                int i=anum.size()-1,j=bnum.size()-1;
                while(i>=0 && j>=0)
                {
                    if(anum[i]!=bnum[j])
                    {
                        return anum[i]<bnum[j];
                    }
                    i--;
                    j--;
                }//这一部分没问题
                //关键在于后面部分,比如3和3334作比较 a,b比较
                //对于左边a,当低位i的值小于高位i+1的值,不用调换,因此anum[i]<anum[i+1]为判断条件
                if(a>b)
                {
                    while(i>=0)//i从小位到大排序
                    {
                        if(anum[i]!=anum[i+1])
                        {
                            return anum[i]<anum[i+1];
                        }
                        i--;
                    }
                }
                //对于左边b,当低位i的值大于高位i+1的值,不用调换。因此bnum[j]>bnum[j+1]为判断条件
                if(a<b)
                {
                    while(j>=0)
                    {
                        if(bnum[j]!=bnum[j+1])
                        {
                            return bnum[j]>bnum[j+1];
                        }
                        j--;
                    }
                }

                return a<b;
            });
        string ans="";
        for(auto &num:numbers)
        {
            ans+= to_string(num);
        }

        return ans;
    }
};
全部评论

相关推荐

已经入职数字马力4个月了,忍不住想和大家聊聊最真实的感受!🔥1️⃣&nbsp;岗位偏见?作为蚂蚁的子公司,很多人会担心“内包”身份会不会有岗位偏见。就我这几个月的体验来说,数字马力一直在快速扩招,面试流程也越来越规范(尤其是校招环节)。至于偏见问题,真的看部门和leader,很幸运我遇到的师兄和主管都特别nice,团队氛围很融洽。2️⃣&nbsp;待遇怎么样?试用期工资不打折!这点我真的吹爆💥!每天六点下班还有餐补,公积金按全额8%交(感动哭)……不过养老金也是实打实的8%,到手稍微心疼一下下😂3️⃣&nbsp;技术栈跟得上吗?技术栈多到学不完……而且我们有权限访问蚂蚁的知识库,自学能力强+愿意钻研的话,成长速度真的飞快!(当然,像我这种偶尔偷懒的也在慢慢进步中😝)4️⃣&nbsp;面试流程?一般是三面:两轮技术面(可能有线上笔试)+&nbsp;一轮HR面(含背调)。整体节奏比较顺畅,反馈也及时。5️⃣&nbsp;未来发展怎么看?老实说,数字马力不算头部大厂,不能指望它给简历镀金,但也绝不是那种会“减分”的外包。我更愿意把它看作一个扎实的中厂跳板,适合积累实战经验。6️⃣&nbsp;怎么投递?通过数字马力gzh,今天刚放出一批新HC!如果你正在看机会,不妨试试数字马力~之前面挂过也没关系,不妨再战一次,机会说不定就来了!🤝✅&nbsp;我的专属内推码:NTA6Nvs,可以直接帮大家推进流程。📮&nbsp;有任何关于公司、岗位、面试的问题,也欢迎留言,我会尽量回复~(小声说:大环境不易,希望大家都能找到心仪的工作,也欢迎来找我内推呀!)
数字马力公司福利 22人发布
点赞 评论 收藏
分享
StephenZ_:我9月份找的第一段实习也是遇到这种骗子公司了,问他后端有多少人和我说7个正职,进去一看只有一个后端剩下的都是产品前端算法(没错甚至还有算法)。还是某制造业中大厂,我离职的时候还阴阳怪气我
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务