输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组[3,32,321],则打印出这三个数字能排成的最小数字为321323。
1.输出结果可能非常大,所以你需要返回一个字符串而不是整数
2.拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
数据范围:
0<=len(numbers)<=100
示例1
输入:
[11,3]
复制返回值:
"113"
复制
示例2
输入:
[]
复制返回值:
""
复制
示例3
输入:
[3,32,321]
复制返回值:
"321323"
思路:排序,两个数字拼接后比较大小
#define MAX_LEN 100
#define MAX_VALUE 10000
int cmp(const void *a, const void *b)
{
int x = *(int *)a;
int y = *(int *)b;
char s1[MAX_LEN];
char s2[MAX_LEN];
sprintf(s1, "%d%d",x,y);
sprintf(s2, "%d%d",y,x);
return strcmp(s1,s2);
}
char* PrintMinNumber(int* numbers, int numbersLen ) {
char *out = malloc(sizeof(char) * MAX_VALUE);
memset(out,0,sizeof(char) * MAX_VALUE);
qsort(numbers,numbersLen,sizeof(numbers[0]),cmp);
for(int i = 0; i < numbersLen; i++){
//printf("numbers[%d]:%d \n",i,numbers[i]);
char tmp[MAX_LEN ] ={0};
sprintf(tmp,"%d",numbers[i]);
strcat(out, tmp);
}
//printf("out:%s\n",out);
return out;
}