题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
需额外声明一个vector容器 和 一个string对象,其一用于存放已知的int型vector转换成字符串后的字符数组,其二用于存放排序后的字符数组拼接后的结果
注意:
书中给出的字符为char* 类型,则需使用字符相关函数(strcmp, strcpy, strcat),代码使用string类型,直接可以+=, <等操作
1、sort与qsort.
2、strcpy函数;
https://www.runoob.com/cprogramming/c-function-strcpy.html
3、strcat函数;
https://www.runoob.com/cprogramming/c-function-strcat.html
4、strcmp函数
https://blog.csdn.net/zhao_fu_lu/article/details/20392239
代码
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
string minNumber = "";
int length = numbers.size();
//检验有效性
if(numbers.empty())
return minNumber;
//声明字符容器用于存放整数转换成的字符
vector<string> stringArray;
//将整数容器中元素转化为字符后逐一压入字符容器中
for(int i = 0 ; i < length ; ++i)
stringArray.push_back(to_string(numbers[i]));
//按自定义规则排序
sort(stringArray.begin(), stringArray.end(), Compare);
//将排序后的各字符拼接起来
for(int i = 0 ; i < length ; ++i)
minNumber += stringArray[i];
return minNumber;
}
static bool Compare(string Str1, string Str2)
{
string compareStr1 = Str1 + Str2;
string compareStr2 = Str2 + Str1;
return compareStr1 < compareStr2;
}
};