题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
将数组中的元素转化为字符串string,然后定义排序规则,如果(str1拼接str2) < (str2拼接str1) 则将str1放在str2前面,否则将str2放在str1前面,进行一次vector<string>的排序即可解决。
注意:
sort()与qsort排序函数的区别,参考:https://blog.csdn.net/zzzmmmkkk/article/details/4266888/
通过的c++代码:
#include<string>
#include<vector>
#include<algorithm>
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
string result;
if(numbers.empty())
{
return result;
}
int len = numbers.size();
vector<string> strNumbers;
for(int i=0; i<len; ++i)
{
strNumbers.push_back(std::to_string(numbers[i]));
}
sort(strNumbers.begin(), strNumbers.end(), myCompare);
for(int i=0; i<len; ++i)
{
result.append(strNumbers[i]);
}
return result;
}
static bool myCompare(string &str1, string &str2)
{
string strCombine1;
strCombine1.append(str1);
strCombine1.append(str2);
string strCombine2;
strCombine2.append(str2);
strCombine2.append(str1);
//compare和strcmp函数一样,如果两个字符串相等,那么返回0,调用对象大于参数返回1,小于返回-1
if(strCombine1.compare(strCombine2) < 0)
return true;
return false;
//return strCombine2.compare(strCombine1);
}
};