<span style="font-family:Courier New;font-size:12px;">#include <iostream>
#include <set>
#include <string>
#include <iterator>
using namespace std;
string intConvertString(unsigned int a);
bool compareNumber(const string &a, const string &b);
string printMinNumber(unsigned int num[], unsigned int length);
int main()
{
unsigned int a[] = {3, 32, 321};
cout << printMinNumber(a, sizeof(a) / sizeof(int)) << endl;
return 0;
}
string printMinNumber(unsigned int num[], unsigned int length)
{
if (num == nullptr)
{
return "";
}
multiset<string, decltype(compareNumber)*> sSet(compareNumber);
for (unsigned int i = 0; i < length; i++)
{
sSet.insert(intConvertString(num[i]));
}
multiset<string, decltype(compareNumber) *>::iterator bIter = sSet.begin();
multiset<string, decltype(compareNumber) *>::iterator eIter = sSet.end();
string minNum;
while (bIter != eIter)
{
minNum = minNum + *bIter;
bIter++;
}
return minNum;
}
string intConvertString(unsigned int a)
{
unsigned int bits = 0;
unsigned int dividend = 1;
string s;
while (a / dividend > 0)
{
bits++;
dividend *= 10;
}
dividend /= 10;
unsigned int i;
unsigned remainder;
unsigned bitValue;
char bitChar;
for (i = 1; i < bits; i++)
{
remainder = a % dividend;
bitValue = a / dividend;
bitChar = bitValue + '0';
a = remainder;
dividend /= 10;
s = s + bitChar;
}
bitChar = a + '0';
s = s + bitChar;
return s;
}
bool compareNumber(const string &a, const string &b)
{
return (a + b) < (b + a);
}</span>
剑指Offer --> Question 33
最新推荐文章于 2019-10-07 17:51:58 发布