179. 最大數
給定一組非負整數,重新排列它們的順序使之組成一個最大的整數。
示例 1:
輸入: [10,2]
輸出: 210
示例 2:
輸入: [3,30,34,5,9]
輸出: 9534330
說明: 輸出結果可能非常大,所以你需要返回一個字符串而不是整數。
解題思路: 我們可以先研究一下排序規則,假設給定不是一組數而是兩個數,我們想讓這兩個數組成的數最大,那麼很自然的就想到用str(a)+str(b)與str(b)+str(a)的關係來決定是使用ab排序還是使用ba排序,那麼對於一組數,我們也可以用相同的思路來解題。
// 標籤:排序
// 我們可以先研究一下排序規則,加入給定不是一組數
// 而是兩個數,我們想讓這兩個數組成的數最大,那麼
// 很自然的就想到用str(a)+str(b)與str(b)+str(a)的
// 關係來決定是使用ab排序還是使用ba排序,那麼對於
// 一組數,我們也可以用相同的思路來解題
// Time:O(nlog(n)), Space:O(log(n))~O(1)
class Solution {
public:
string largestNumber(vector<int>& nums) {
auto cmp = [](int a, int b) {
string sa = to_string(a);
string sb = to_string(b);
return sa + sb > sb + sa;
};
sort(nums.begin(), nums.end(), cmp);
string res;
for (auto num : nums) {
res += to_string(num);
}
while (res.size() > 1 && res[0] == '0') {
res.erase(res.begin());
}
return res;
}
};