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.
题目的意思就是给定一个整形的非负数组,然后输出这些数字组成的最大的数(考虑溢出问题,用字符串表示大数)。
- 大致思路就是先把数组中的元素转换成字符串类型,这个有现成的函数to_string(),然后再自定义比较函数,这样可以利用c++标准库的sort函数对字符串函数进行比较,在自定义比较函数的时候注意需要比较等长的字符串。
c++ AC代码如下:
class Solution {
public:
static bool stringSort(int s1, int s2)
{
return (to_string(s1) + to_string(s2)).compare(to_string(s2)+to_string(s1)) > 0;
}
string largestNumber(vector<int> &num) {
sort(num.begin(), num.end(), stringSort);
string ret = "";
for (int i = 0; i<num.size(); i++)
{
ret += to_string(num[i]);
}
if (ret[0] == '0') return "0";
return ret;
}
};