JavaScript 124ms:- var largestNumber = function(nums) {
- var arr = [];
- [].forEach.call(arguments,function(a){a.map?[].push.apply(arr,a):arr.push(a)})
- return arr
- .sort(function(a,b){
- return ''+b+a > ''+a+b ? 1 : -1
- })
- .join('').replace(/^0+(.)/,'$1')
- }
复制代码 C语言 0ms:- char* largestNumber(int* nums, int numsSize) {
- struct struct_num{
- int digit;
- int number;
- };
-
- struct struct_num *group[10][100], *pg, *pg2;
- int group_count[10]={0,0,0,0,0,0,0,0,0,0};
- int i,j,k;
- int number,index,digit;
- char output[10000]="0";
- char *p=output;
-
- const char itoa_map[11]="0123456789";
-
- for(i=numsSize;i--;){
- number = nums[i];
-
- for(digit=10;number>=digit;digit*=10){}
- index = number/(digit/10);
-
- pg=(struct struct_num *)malloc(sizeof(struct struct_num));
-
- group[index][group_count[index]++]=pg;
- (pg)->number = number;
- (pg)->digit = digit;
- }
-
- for(i=10;i--;){
- for(j=group_count[i];j-->0;){
- pg = group[i][j];
-
- for(k=j;k-->0;){
- pg2 = group[i][k];
- if(
- ((long long) pg->number * pg2->digit+pg2->number)< ((long long) pg2->number * pg->digit + pg->number)
- ){
- * (long long*) pg ^= * (long long*) pg2;
- * (long long*) pg2 ^= * (long long*) pg;
- * (long long*) pg ^= * (long long*) pg2;
- }
- }
- }
- for(j=group_count[i];j--;){
- pg = group[i][j];
- number = pg->number;
- digit = pg->digit / 10;
- while(digit >= 1){
- *p++ = itoa_map[number / digit % 10];
- digit /= 10;
- }
- free(pg);
- }
- }
- if(output[0]=='0')return "0";
-
- *p='\0';
-
- return output;
- }
复制代码
|