题目:
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.
bool compare(string a, string b){//!!!!定义新的比较规则——不是比较a和b而是比较a+b和b+a
//compare不能为成员函数
string s1 = a + b;
string s2 = b + a;
return s2 < s1;//递减
}
class Solution {
public:
string largestNumber(vector<int>& nums) {
string res;
if (nums.empty()) return res;
vector <string> auxiliary(nums.size());
//numToString
for (int i = 0; i < nums.size(); ++i){
auxiliary[i] = numToString(nums[i]);
}
//sort
sort(auxiliary.begin(), auxiliary.end(), compare);
//连接
for (int i = 0; i < nums.size(); ++i){
res += auxiliary[i];
}
//去掉开头的0使之符合人的阅读习惯 要求组成最大数,所以如果有比0大的数的话,第一个一定不是0
//如果第一个字符是0的话,则该数是0
if (res[0] == '0') {
res = "0";
}
return res;
}
private:
//num都是非负整数
string numToString(int num){
if(0 == num) return "0";!!!!!!!如果num本身是0的话,就进不了while循环,因此也就无法转换为字符串,因此这里要特殊处理
string res;
while (num != 0)
{
res.push_back(num % 10 + '0');
num /= 10;
}
reverse(res.begin(), res.end());
return res;
}
};