您的位置:首页 > 职场人生

剑指Offer之面试题33:把数组排成最小的数

2017-01-07 21:16 351 查看
所有代码均通过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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 剑指Offer 面试题