Largest Number || LeetCode
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 1000 int cmp(char *s1,char *s2){ char temp1[100]; char temp2[100]; strcpy(temp1,s1); strcat(temp1,s2); strcpy(temp2,s2); strcat(temp2,s1); if(strcmp(temp1,temp2)<0)return 1; else return 0; } char* into_string(int n){ char *p; p=(char*)malloc(50*sizeof(char)); sprintf(p,"%d",n); return p; } char* largestNumber(int* nums, int numsSize) { char re[100][100]; char temp[100]; char *p; int i,j; p=(char*)malloc(MAX*sizeof(char)); for(i=0;i<numsSize;i++)strcpy(re[i],into_string(nums[i])); for(i=0;i<numsSize;i++){ //用的冒泡,不好意思@@ 虽然这是这题的核心算法,思想就是判断两个字串要不要交换位置的条件是,将这两个字串分别以两种方式拼接,再比较哪一 //种拼接更优 for(j=i+1;j<numsSize;j++) if(cmp(re[i],re[j])){ strcpy(temp,re[i]); strcpy(re[i],re[j]); strcpy(re[j],temp); } } for(i=0,p[0]='\0';i<numsSize;i++) strcat(p,re[i]); while(*p=='0')p++; if(*p=='\0')return "0"; return p; }