Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9]
, the largest formed number is 9534330
.
Note: The result may be very large, so you need to return a string instead of an integer.
一开始脑子没转过弯来,用的复杂的判断大小方法,一直通不过各种 test case
class Solution {
public:
void execute(string &str, vector<string> &strnum)
{
while(strnum.begin() != strnum.end())
{
vector<string>::iterator big = strnum.begin();
vector<string>::iterator iter = big+1;
while (iter != strnum.end())
{
if (big->compare(*iter) == 0)
{
iter++;
continue;
}
int i = 0;
while(1)
{
if (i == big->size())
{
if (big->compare(iter->substr(i)) < 0)
big = iter;
break;
}
if (i == iter->size())
{
if (iter->compare(big->substr(i)) > 0)
big = iter;
break;
}
if ((*big)[i] > (*iter)[i])
break;
if ((*big)[i] < (*iter)[i])
{
big = iter;
break;
}
i++;
}
iter++;
}
str += *big;
strnum.erase(big);
}
}
string largestNumber(vector<int> &num)
{
string res;
vector< vector<string> > strnum(10);
for (int i = 0; i < num.size(); i++)
{
stringstream ss;
ss << num[i];
string tmp = ss.str();
strnum[tmp[0] - '0'].push_back(tmp);
}
for (int i = 9; i > 0; i--)
execute(res, strnum[i]);
if (res.empty())
return "0";
execute(res, strnum[0]);
return res;
}
};
后来不知怎么脑袋就开窍了就通过了,难点就在于判断俩首字母相同的字符串大小吧
class Solution {
public:
void execute(string &str, vector<string> &strnum)
{
while(strnum.begin() != strnum.end())
{
vector<string>::iterator big = strnum.begin();
vector<string>::iterator iter = big+1;
while (iter != strnum.end())
{
string tmp1 = *big;
tmp1 += *iter;
string tmp2 = *iter;
tmp2 += *big;
if (tmp1.compare(tmp2) < 0)
big = iter;
iter++;
}
str += *big;
strnum.erase(big);
}
}
string largestNumber(vector<int> &num)
{
string res;
vector< vector<string> > strnum(10);
for (int i = 0; i < num.size(); i++)
{
stringstream ss;
ss << num[i];
string tmp = ss.str();
strnum[tmp[0] - '0'].push_back(tmp);
}
for (int i = 9; i > 0; i--)
execute(res, strnum[i]);
if (res.empty())
return "0";
if(strnum[0].size() > 0)
{
string tmp(strnum[0].size(), '0');
res += tmp;
}
return res;
}
};