输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
这道题是一个排序问题,但是要自定义排序规则。
需要注意的问题是:拼接起来的数可能超出整型数的表示范围,因此这也是一个大数问题。
用字符串来表示解决溢出问题。
<span style="font-size:18px;"> class Solution { public: string PrintMinNumber(vector<int> numbers) { string ret; ret.clear(); if(numbers.empty()) return ret; string numToStr; int len = numbers.size(); vector<string> vStr; for(int i=0; i< len ;i++) { stringstream sst;//定义string流对象 sst<<numbers[i];//这里注意 流写入符号 "<<" 也就是标准输出符号,在这里是用来向 //流对象写入数据 vStr.push_back(sst.str()); } sort(vStr.begin(), vStr.end(),compare); for(int i=0; i<len; i++) ret.append(vStr[i]); return ret; } static bool compare(const string &str1, const string &str2) { return (str1+str2) < (str2+str1);//注意小于号,代表从小到大排序,大于号则相反 } }; </span>
原文地址:http://blog.csdn.net/tommyzht/article/details/47158879