力扣 面試題45. 把數組排成最小的數 貪心

https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/

在這裏插入圖片描述

思路:首先把每個整數都轉換成字符串,關鍵是如何組合這些字符串,顯然對於任意兩個字符串s1s2s_1、s_2來說,如果s1+s2<s2+s1s_1+s_2<s_2+s_1,就應該把s1s_1放在s2s_2前面,否則把s1s_1放在後面。

class Solution {
public:
    static bool cmp(const string &s1,const string &s2)
    {
        return s1+s2<s2+s1;
    }
    string minNumber(vector<int>& nums) {
        vector<string> ans;
        stringstream s;
        int sz=nums.size();
        for(int i=0;i<sz;i++)
        {
            s<<nums[i];
            ans.push_back(s.str());
            s.str("");
        }
        sort(ans.begin(),ans.end(),cmp);
        string res;
        for(int i=0;i<sz;i++)
            res+=ans[i];
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章