//方法一:定义lamda函数进行比较操作,比较容易理解
string PrintMinNumber(vector<int> numbers)
{
sort(numbers.begin(), numbers.end(), [](const int& a, const int& b){
return to_string(a) + to_string(b) < to_string(b) + to_string(a); });
string res;
for (auto c : numbers)
res += to_string(c);
return res;
}
//方法二:使用全排列的方法
void getMinCombineNumberInArray(vector<int> &numbers, int begin, long long& minValue){
if (numbers.size() - 1 == begin){
string str = "";
for (int i = 0; i < numbers.size();i++)
{
string temp = to_string(numbers[i]);
str += temp;
}
long long value = stol(str);
if (minValue > value)
minValue = value;
}
for (int i = begin; i < numbers.size(); i++)
{
swap(numbers[i], numbers[begin]);
getMinCombineNumberInArray(numbers, begin + 1, minValue);
swap(numbers[i], numbers[begin]);
}
}
//全排列
string PrintMinNumber2(vector<int> numbers){
string res;
if (numbers.empty())
return res;
long long minValue = LLONG_MAX;
getMinCombineNumberInArray(numbers, 0, minValue);
res = to_string(minValue);
return res;
}