解题思路:
使用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;
}
};
};