给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。
想法是,排序数组中的数,但需要重新定义排序的比较函数。
对于两个数a、b,分别拼接成ab和ba,以这两个数的大小定义排序大小。
使用sprintf函数将数字转换成字符串。
将两个数字拼接是大小会超过int,需要使用long long。
拼接之后需要去掉前导零。
class Solution { public: /** *@param num: A list of non negative integers *@return: A string */ static bool cmp(int a, int b){ char sa[100],sb[100]; sprintf(sa,"%d",a); sprintf(sb,"%d",b); int lena = strlen(sa); int lenb = strlen(sb); long long ta = a*(long long)pow(10, lenb) + b; long long tb = b*(long long)pow(10, lena) + a; return ta > tb; } string largestNumber(vector<int> &num) { // write your code here sort(num.begin(), num.end(), cmp); char str[100]; string ans = ""; for(int i = 0; i < num.size(); i++){ sprintf(str,"%d",num[i]); //return ans; if(ans == "0" && str[0] == '0') //return str; continue; ans += str; } return ans; } };
