[Leetcode/C++] 179_Largest Number



問題は次のとおりです.
優先キューを使用し、優先キューで演算子の再ロードでソートして問題を解決します.
プールは次のとおりです.
class Solution {
public:
    struct compare{
        bool operator()(int a, int b){
            string s1 = to_string(a); string s2 = to_string(b);
            return s1+s2 < s2+s1; // string으로 비교
        }
    };
    
    string largestNumber(vector<int>& nums) {
        
        priority_queue<int, vector<int>, compare> pq;
        
        for(int i=0; i<nums.size(); i++){
            pq.push(nums[i]);
        }
        
        string s;
        
        while(!pq.empty()){
            s += to_string(pq.top());
            pq.pop();
        }
        
        if(s[0]=='0') return "0";
        else return s;
    }
};
うーん、この問題で混同されている部分は、
最初は単純にs 1例えば、3と30を比較する場合、優先度3は30より高い.
私が初めて考えた時はこの状況を除いて
もう一度考えてみると、2つの文字列を加算すると、330と303が比較されると、左側が大きくなります.
したがって、s 1+s 2また,優先順位Qを利用したのですが,議論中にベクトルを利用して並べ替えた良い解もあったので,持ってきましたハハ
class Solution {
public:
     string largestNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end(),[](int &a,int &b){
            string s1=to_string(a);
            string s2=to_string(b);
            return s1+s2>s2+s1;
        });
        string ans="";
        for(int i=0;i<nums.size();i++){
            string s=to_string(nums[i]);
            ans += s;
        }
        if(ans[0]=='0'){
            return "0";
        }
        return ans;
    }
};