原题链接https://leetcode.com/problems/largest-number/
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 is9534330
.
Note: The result may be very large, so you need to return a string instead of an integer.
给定数组,返回用数组中的数组合生成的最大的数。
我们只需要进行排序就行了,我使用的最简单的冒泡排序从小到大
排序前先将数组中的数转换成string,可以使用stringstream类
对于字符串a,b
if(a+ b > b + a)return true;
else return false;
然后再将排好序的数组中的字符串逆序相加。
如果组装好的字符串的第一个字符为0,显然后面的全是0,直接返回“0”
<pre name="code" class="cpp">class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string>snum;
stringstream ss;
string str;
if(nums.empty())return "";
for (auto &a : nums)
{
ss.clear();
ss << a;
getline(ss, str);
snum.push_back(str);
}
for (int i = 0; i < snum.size(); ++i)
{
for (int j = i + 1; j < snum.size(); ++j)
{
if (cmp(snum[i], snum[j]))swap(snum[i], snum[j]);
}
}
str = "";
for (auto it = snum.rbegin(); it != snum.rend(); ++it)
str += *it;
if(str[0] == '0')return "0";
return str;
}
void swap(string& a, string& b)
{
string t = a;
a = b;
b = t;
}
bool cmp(const string& a, const string& b)
{
string t1 = a + b;
string t2 = b + a;
if (t1 > t2)return true;
else return false;
}
};