把数组排成最小的数。充分利用string的自带compare

来源:互联网 发布:数组去重复js 编辑:程序博客网 时间:2024/06/05 17:52

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


精髓:字符串的比较规则是:str1.compare(str2)>0 ====>str1>str2 从左往右比较,比较到空时,长度长的赢。

比较的时候,从字符串左边开始,一次比较每个字符,直接出现差异、或者其中一个串结束为止。 比如ABC与ACDE比较,第一个字符相同,继续比较第二个字符,由于第二个字符是后面一个串大,所以不再继续比较,结果就是后面个串大。 再如ABC与ABC123比较,比较三个字符后第一个串结束,所以就是后面一个串大。 所以,长度不能直接决定大小,字符串的大小是由左边开始最前面的字符决定的。


精髓在此,数字大小1112>9,但是字符串大小11112<9,这就是字符串比较的优势,它不在乎长度,只在乎从左到右,谁的数字比较小。它在乎的是,这个数字能提供的“最大数字

字符串小的,它肯定在前面,因为它提供的最高位最小。

class Solution {public:    string PrintMinNumber(vector<int> numbers) {        string res;        if(numbers.empty()) return res;        vector<string> vecstr;        for (int i = 0; i < numbers.size(); ++i) vecstr.push_back(to_string(numbers[i]));        sort(vecstr.begin(),vecstr.end(),strcompare);        for (int i = 0; i < vecstr.size(); ++i) res=res+vecstr[i];        return res;            }        static bool strcompare(const string&s1,const string&s2){        string str_1_2=s1+s2;        string str_2_1=s2+s1;        return str_1_2.compare(str_2_1)<=0?true:false;    }};



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 简书投稿被拒绝怎么办 论文引用文献为0怎么办 小米屏幕录制卸载了怎么办 用edius剪的视频卡顿怎么办 微店手机号换号登不进去了怎么办 微信加人被限制怎么办 微信与电脑同步怎么办 微信号盗了红包怎么办 微信被别人登录冻结了怎么办? 微信账号被冻结了怎么办 我微信冻结了怎么办 微信账号冻结了怎么办 微信被冻结里面的钱怎么办 微信账户冻结了怎么办 微信公众号忘记密码怎么办 网课没有刷完怎么办 形势与政策挂了怎么办 苹果录屏声音小怎么办 老师跟学生家长吵起来了怎么办 蓝幕拍摄抠像有蓝色怎么办 学东西悟性不高怎么办 微商不会写笔记怎么办 布鞋买大了一码怎么办 凉鞋买大了一码怎么办 皮鞋小了一码怎么办妙招 图书馆借的书本损坏了怎么办 把人打伤没钱赔怎么办 小孩不小心打伤了老师怎么办 高考进了三段怎么办 工作中和领导产生冲突怎么办 酒店不给员工发工资怎么办 裙子没有解开超市的锁怎么办 接待老外听不懂他说的怎么办 脚脱皮又痒又臭怎么办 成都应聘平面模特被骗了怎么办 文明6开场一堆蛮族怎么办 幼儿园里出了水痘怎么办 穿高跟鞋脚容易出汗怎么办 粗跟鞋走路太响怎么办 粗跟鞋鞋跟很响怎么办 皮鞋跟走路太响怎么办