所有代码均通过G++编译器测试,仅为练手纪录。
//面试题33:把数组排成最小的数
//题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出所有数字中最小的一个。
// 例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.
//面试题33:把数组排成最小的数
//题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出所有数字中最小的一个。
// 例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.
bool StrCompare(string &strElem1, string &strElem2)
{
string strFirst(strElem1+strElem2);
string strSecond(strElem2+strElem1);
return strFirst < strSecond;
}
string GetMinNum(int *piNum,int nSize)
{
if(NULL == piNum || nSize <= 0)
{
return "";
}
vector<string> vecNum(nSize);
for(int i = 0; i < nSize; ++i)
{
vecNum[i] = to_string(piNum[i]);
}
sort(vecNum.begin(), vecNum.end(), StrCompare);
string strMin;
for(int i = 0; i < nSize; ++i)
{
strMin += vecNum[i];
}
return strMin;
}
void TestGetMinNum()
{
int arrVal[] = {3,32,321};
int nValSize = sizeof(arrVal)/sizeof(int);
LogInfo("MinNum:%s",GetMinNum(arrVal,nValSize).c_str());
}
ZhaiPillary
2017-01-07