Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9]
, the largest formed number is 9534330
.
Note: The result may be very large, so you need to return a string instead of an integer.
题意:
给出一个数组,用数组中的元素组成最大的数,并将这个数用string的形式表示并返回。
思路:
重写cmp函数进行sort。首先可以利用sstream将数字转化成字符串存储在vector<string> str中。对于cmp函数,主要的就是比较s1+s2和s2+s1哪个表示的数比较大。然后sort(str.begin(), str.end(), cmp),将str中的元素按序输出就可以。注意的是,可能原来的数组是全0组成的,此时返回“0”即可。所以需要在sort后判断一下str[0]是否为"0"。
复杂度:
空间:因为存储string,所以为O(n);
时间:sort(nlogn),其他的都是遍历数组为O(n),所以总时间复杂度为O(nlogn)。
代码:
class Solution {
public:
static int cmp(string s1, string s2){
if((s1+s2)>(s2+s1)) return 1;
return 0;
}
string largestNumber(vector<int>& nums) {
int len=nums.size();
string res;
if(len==0) return "";
vector<string> str;
for(int i=0; i<len; i++){
stringstream temp;
string s;
temp << nums[i];
temp >> s;
str.push_back(s);
}
sort(str.begin(), str.end(), cmp);
if(str[0]=="0") return "0";
for(int i=0; i<len; i++) res+=str[i];
return res;
}
};