题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
关键点是to_string函数的使用,每次将一个数字转换为字符串的形式。
然后尾插入string类型的vector中。
我的思路就是不断组合比较的过程:
比如:
{3,32,321} 第一步 : 比较 332,323 得到 323 较小
第二步 :{323,321}:
比较: 323321,321323 得到 321323 较小
得到数组中所有数字拼接得到的最小的数: 321323
这里就需要定义一个比较函数:
static bool compare(const string& str1, const string& str2)
{
string s1 = str1 + str2;
string s2 = str2 + str1;
return s1 < s2;
}
但注意,因为我们后续使用的sort函数只有两个参数,因此需要将compare函数给成静态成员函数。否则sort函数会报错。
class Solution {
public:
static bool compare(const string& str1, const string& str2)
{
string s1 = str1 + str2;
string s2 = str2 + str1;
return s1 < s2;
}
string PrintMinNumber(vector<int> numbers)
{
int size = numbers.size();
vector<string> num_result;
for (int i = 0; i < size; i++)
{
string s = to_string(numbers[i]);
num_result.push_back(s);
}
sort(num_result.begin(), num_result.end(),compare);
string result;
for (int i = 0; i < size; i++)
{
result += num_result[i];
}
return result;
}
};