剑指offer:面试题33——把数组排成最小的数
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:为了方便比较每一位且应用于大数,对于串s1s2和s2s1,重新定义比较规则compare,按照字符串比较规则定义即可。利用C++库函数将传入数组中的值按照新规则从大到小排序后,将字符串连接起来即可
class Solution {
public:
static bool compare(int x,int y)
{
string str1 = to_string(x);
string str2 = to_string(y);
//字符串连接直接相加,利用字符串比较规则判定
return (str1+str2)<(str2+str1);
}
public:
string PrintMinNumber(vector<int> numbers) {
if(numbers.empty())return "";
string strren="";
sort(numbers.begin(),numbers.end(),compare);
for(int i=0;i<numbers.size();i++)
{
strren+=to_string(numbers[i]);
}
return strren;
}
};