您的位置:首页 > 职场人生

面试题33_把数组排成最小的数

2015-07-30 23:04 453 查看

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: