前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指offer 33 把数组排成最小的数

剑指offer 33 把数组排成最小的数

作者头像
bear_fish
发布2018-09-20 17:40:57
4450
发布2018-09-20 17:40:57
举报

转载请注明出处:http://blog.csdn.net/ns_code/article/details/28128551

题目描述:

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

输入:

输入可能包含多个测试样例。 对于每个测试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。 输入的第二行包括m个正整数,其中每个正整数不超过10000000。

输出:

对应每个测试案例, 输出m个数字能排成的最小数字。

样例输入:

代码语言:javascript
复制
3
23 13 6
2
23456 56

样例输出:

代码语言:javascript
复制
13236
2345656

    这道题主要要自定义一个比较组合后的数字的大小的规则,主要是对于数字m和n,先将其转化为字符串,而后比较其组合mn和nm的大小,这里直接按照字符串的大小标准来比较即可,最后用qsort进行排序,排序后的字符串数组中的字符串从左向右组合起来的字符串即使最小的字符串,即转化为整数后为最小的整数。

    AC代码如下:

[cpp] view plaincopy

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. char strs[100][10];  
  5. /*
  6. 自定义比较规则
  7. */
  8. int mycompare(const void *str1,const void *str2)  
  9. {  
  10. static char s1[20];  
  11. static char s2[20];  
  12. char *string1 = (char *)str1;  
  13. char *string2 = (char *)str2;  
  14. //将两个字符串合并在一起
  15.     sprintf(s1,"%s%s",string1,string2);  
  16.     sprintf(s2,"%s%s",string2,string1);  
  17. return strcmp(s1,s2);  
  18. }  
  19. /*
  20. 以字符串形式打印出最小的整数
  21. */
  22. void PrintMinNum(int *nums,int len)  
  23. {  
  24. if(nums==NULL || len<1)  
  25. return;  
  26. int i;  
  27. //将整数写入到字符串中
  28. for(i=0;i<len;i++)  
  29.         sprintf(strs[i],"%d",nums[i]);  
  30. //按照mycompare中指定的规则排序
  31.     qsort(strs,len,10*sizeof(char),mycompare);  
  32. for(i=0;i<len;i++)  
  33.         printf("%s",strs[i]);  
  34.     printf("\n");  
  35. }  
  36. int main()  
  37. {  
  38. int nums[100];  
  39. int m;  
  40. while(scanf("%d",&m) != EOF)  
  41.     {  
  42. int i;  
  43. for(i=0;i<m;i++)   
  44.             scanf("%d",nums+i);  
  45.         PrintMinNum(nums,m);  
  46.     }  
  47. return 0;  
  48. }  

/**************************************************************

Problem: 1504

User: mmc_maodun

Language: C++

Result: Accepted

Time:240 ms

Memory:1020 kb

****************************************************************/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年12月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档