題目: LeetCode - 179. Largest Number

題目說明

給一個陣列,裡面有包含許多整數,求這些整數能組出的最大數字。

解題思路

我們先對陣列進行排序,排序的規則為 to_string(l) + to_string(r) > to_string(r) + to_string(l),由於答案的組成也是將數字轉換為字串後組起來,所以我們在排序時也是以轉換成字串後組起來較大的數值放在前面,如 9, 30 兩數排序,由於 930 > 309,所以 9 排在前面,最後將陣列組成字串組起來即可。

參考解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// fast IO
static auto __ = []()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
return 0;
}();
class Solution {
public:
string largestNumber(vector<int>& nums)
{
string str;
sort(nums.begin(), nums.end(), [](auto& l, auto&r) { return to_string(l) + to_string(r) > to_string(r) + to_string(l); });
for(const auto& val : nums) str += to_string(val);
return !nums.front() ? "0" : str;
}
};