[LeetCode] 179. 最大數

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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章