题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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>