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.
这道题一开始分析,思路是组成largest 数字是有规律的,如果能放在一个可以自定义排序的容器里面,放进去可以自动排好序,直接输出就是想要的结果, 一开始打算用priority_queue,但是后来又发现,其实可以直接定义一个sort函数,把原来的数组sort一下就可以了,就开始写自定义的sort函数,但是sort函数写的非常长,而且啰嗦,一个字符一个字符地比较,虽然也能写出来,但是自定义的sort函数这么长总觉得不规范,后来在网上看别人写的sort函数,发现其实只要比较两个字符串,s1+s2 , s2+s1谁长就把谁大放在前面,这样一想简单多了。 注意对某些语句简写的方法,以后的程序中可以应用。
class comp {
public:
bool operator()(string left, string right) {
return left + right > right+left;
}
};
class Solution {
public:
string largestNumber(vector<int>& nums) {
string rst = "";
//sanity check
if (nums.size() == 0) return rst;
vector<string> snums;
for (int i = 0; i < nums.size(); i++) {//for (int i : nums) : 对每个nums里面的数i
int tmp = nums[i];
//get the first digit
string stmp = to_string(tmp);
snums.push_back(stmp);
}
comp mycomp;
sort(snums.begin(), snums.end(), mycomp);
for (int i = 0; i < snums.size();i++) { //for (string i : snums) : 对每个snums里面的string i
rst += snums[i];
}
if (rst[0] == '0' && rst.size() > 0) return "0";
return rst;
}
};
No comments:
Post a Comment