给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
解题思路:这题思路很简单,将数值转换成string类型数据后将大的放置在栈的上方即可。
系统自带的比较方法是: “3” 比 “31”小,而咱们需要的结果是 “3” 排在 “31”前方。因此自己构造了一个比较方法,
利用比较 A+B > B+A来判断,非常好。
此外还有一个小细节,如果输入都为0,那么最后输出值为一个0而不是许多0。
struct strgreater { bool operator()(std::string& str1, std::string& str2) { if(str1+str2 < str2+str1) return true; else return false; } }; //179 string largestNumber(vector<int>& nums) { string res; if(nums.empty()) return res; //priority_queue<string> q;//默认从大到小顺序出队 priority_queue<string,vector<string>,strgreater> q; for(size_t i=0;i<nums.size();i++) q.push(to_string(nums[i])); if(q.top()=="0") return "0"; while(!q.empty()) { res = res + q.top(); q.pop(); } return res; }