题目描述
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
解题思路
组成最大数应使得高位数字尽量大,所以首先按照高位数字从大到小对数组排序,然后一次从高位到低位组成最大数。注意若数组全为0,则直接返回一个0.
代码
1 class Solution { 2 public: 3 string largestNumber(vector<int>& nums) { 4 vector<string> numStr; 5 for(int num: nums) 6 numStr.push_back(to_string(num)); 7 sort(numStr.begin(), numStr.end(), cmp); 8 if(numStr.size() && numStr[0] == "0") return "0"; 9 string s = ""; 10 for(string num: numStr) 11 s += num; 12 return s; 13 } 14 static bool cmp(string i, string j){ 15 return i + j > j + i; 16 } 17 };