给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。
想法是,排序数组中的数,但需要重新定义排序的比较函数。
对于两个数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;
}
};