解题思路:
使用C++中的优先队列priority_queue,通过自定义比较函数cmp,来对nums数组进行排序。最后按排序结果,顺序将nums中的数push_back进字符串res中,即得到结果。
class Solution { public: string largestNumber(vector<int>& nums) { if(nums.empty()) return "0"; priority_queue<int, vector<int>, cmp> pq; for(auto num: nums){ pq.push(num); } string res; while(pq.top() == 0 && !pq.empty()) pq.pop(); while(!pq.empty()){ res += to_string(pq.top()); pq.pop(); } if(res.empty()) return "0"; //nums数组中元素都为0的情况 return res; } struct cmp{ bool operator()(int a, int b){ string tmpa = to_string(a); string tmpb = to_string(b); //不能使用stoi, int会超出限制 if(stol(tmpa+tmpb) > stol(tmpb+tmpa)) return false; else return true; } }; };
