题目描述
Given a list of non negative integers, arrange them such that they form the largest number.
题目大意
给定一个非零整数数组,将数组中的数字按照一定的顺序排列组成一个最大的数。
示例
E1
Input: [10,2]
Output: "210"
E2
Input: [3,30,34,5,9]
Output: "9534330"
解题思路
一个简单的方法,按照一定的规则先将该数组排序,再遍历一边数组即得到结果。
该规则为:返回(a + b)和(b + a)的更大的值。
(PS:a,b均为string类型)
复杂度分析
时间复杂度:O(nlog(n))
空间复杂度:O(n)
代码
//大小比较规则 bool cmp(string a, string b) { return (a + b) > (b + a); } class Solution { public: string largestNumber(vector<int>& nums) { vector<string> sn; //将int转为string存储 for(int i : nums) sn.push_back(to_string(i)); //将string数组排序 sort(sn.begin(), sn.end(), cmp); string ans = ""; for(int i = 0; i < sn.size(); i++) ans += sn[i]; //将结果头部'0'删除 while(ans.size() != 1 && ans[0] == '0') ans.erase(0, 1); return ans; } };