数据结构(六十五)
学习数据结构与算法过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。
—— 把数组排成最小的数 ——
1.题目描述
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例
输入:
[10,2]
输出:
"102"
输入:
[3,30,34,5,9]
输出:
"3033459"
2.代码
c
int compare(const void *a, const void *b){
char num1[20];
char num2[20];
sprintf(num1, "%d%d", *(int *)a, *(int *)b);
sprintf(num2, "%d%d", *(int *)b, *(int *)a);
return strcmp(num1, num2);
}
char* minNumber(int* nums, int numsSize){
char *res = (char *)malloc(sizeof(char) * 1000);
char *n = res;
qsort(nums,numsSize,sizeof(int),compare);
for (int i = 0; i < numsSize; i++)
n += sprintf(n, "%d", nums[i]);
*n = '\0';
return res;
}
思路参考了题解里的大佬,部分解决办法也是借鉴了题解里一些比较简单实用的办法。