【leetcode】179. 最大数

int cmp(const void*a,const void*b){
    char s1[100],s2[100];
    sprintf(s1,"%d%d",*(int *)a,*(int *)b);
    sprintf(s2,"%d%d",*(int *)b,*(int *)a);
    return strcmp(s2,s1);
}
char * largestNumber(int* nums, int numsSize){
    qsort(nums,numsSize,sizeof(int),cmp);
    if(nums[0]==0) 
        return "0";
    char* res=(char*)calloc(sizeof(char),1000);
    int i,len=0;
    for(i=0;i<numsSize;i++){
        len+= sprintf(res+len,"%d",nums[i]);
    }
    return res;
}
int cmp(const void* a,const void* b){
    char* s1=(*(char**)a);
    char* s2=(*(char**)b);
    int i;
    for (i=0; s1[i] && s2[i]; i++ )
    {
        if(s1[i] != s2[i])
            return s1[i]<s2[i];
    }
    if(s1[i] == '' && s2[i] == '')
        return 0;
    else if(s2[i] == ''){
        char* buffer=(char*)calloc(20,sizeof(char));
        strcat(buffer,s1+i);
        strcat(buffer,s2);
        return strcmp(s1,buffer);
    }
    else if(s1[i] == ''){        
        char* buffer=(char*)calloc(20,sizeof(char));
        strcat(buffer,s2+i);
        strcat(buffer,s1);    
        return strcmp(buffer,s2);
    }
    return 0;
}
char * largestNumber(int* nums, int numsSize){
    char** arr=(char**)calloc(numsSize,sizeof(char*));
    char* retStr=(char*)calloc(500,sizeof(char));
    int i;
    for (i=0; i<numsSize; i++)
    {
        char* temp=(char*)calloc(20,sizeof(char));
        sprintf(temp,"%d",nums[i]);
        arr[i]=temp;
        
    }
    qsort(arr,numsSize,sizeof(char*),cmp);  
    for (i=0; i<numsSize; i++)
        strcat(retStr,arr[i]);
    return (*retStr=='0')?"0" :retStr;
}
原文地址:https://www.cnblogs.com/ganxiang/p/14185414.html