2019独角兽企业重金招聘Python工程师标准>>>

题目描述:

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

输入:

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

输出:

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

样例输入:
3
23 13 6
2
23456 56

样例输出:
13236
2345656

解题思路:

  首先,最普通的思路就是权进行一次排列,找出最小的数。但是这样可能会超时。

  这里,我们首先对数列进行排序,最后进行一次整合。算法上面主要采取冒泡排序,对每个数与其前面的数进行比较。

void bubbleSort(char c[][10],int n){int i,j;for( i=n-1 ; i>0 ; i-- ){for(j = n-1;j>(n-1-i);j--){if(findSmall(c,j))swap(c,j,j-1);}}
}

在比较时,采用特别的思路----把两个字符串进行拼接,如果字符串1排在前面的数小,那么就把字符串1放到前面。

int findSmall(char c[][10],int i){char stri[20];char strj[20];strcpy(stri,c[i]);strcpy(strj,c[i-1]);strcat(stri,c[i-1]);strcat(strj,c[i]);int k;int length = strlen(stri); for(k=0;k<length;k++){if(stri[k] == strj[k])continue;else if(stri[k] < strj[k]){return 1;}else{return 0;}}
}

排序后,可以保证直接进行连接的数列是最小的。

全部代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bubbleSort(char c[][10],int n);
int findSmall(char c[][10],int i);
void swap(char c[][10],int i,int j);
int main(){int n,i;while(scanf("%d",&n)!=EOF && n>0 && n<=100 ){int arr[100];char c[100][10];char string[1000];for(i=0;i<n;i++){scanf("%d",&arr[i]);sprintf(c[i],"%d",arr[i]);}bubbleSort(c,n);strcpy(string,c[0]);for(i=1;i<n;i++){strcat(string,c[i]);}printf("%s\n",string);}return 0;
}
void bubbleSort(char c[][10],int n){int i,j;for( i=n-1 ; i>0 ; i-- ){for(j = n-1;j>(n-1-i);j--){if(findSmall(c,j))swap(c,j,j-1);}}
}
int findSmall(char c[][10],int i){char stri[20];char strj[20];strcpy(stri,c[i]);strcpy(strj,c[i-1]);strcat(stri,c[i-1]);strcat(strj,c[i]);int k;int length = strlen(stri); for(k=0;k<length;k++){if(stri[k] == strj[k])continue;else if(stri[k] < strj[k]){return 1;}else{return 0;}}
}
void swap(char c[][10],int i,int j){char tmp[10];int k;for(k=0;k<10;k++){tmp[k] = c[i][k];c[i][k] = c[j][k];c[j][k] = tmp[k];}
}
/**************************************************************Problem: 1504User: xhaloLanguage: CResult: AcceptedTime:320 msMemory:916 kb
****************************************************************/

转载于:https://my.oschina.net/u/204616/blog/545011

剑指OFFER之把数组排成最小的数(九度OJ1504)相关推荐

  1. 【LeetCode】剑指 Offer 45. 把数组排成最小的数

    [LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...

  2. 《剑指offer》-- 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格

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

  3. 剑指offer:把数组排成最小的数

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

  4. 【自定义排序规则】剑指 Offer 45. 把数组排成最小的数

    我是小张同学,立志用更简洁的代码做更高效的表达 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "1 ...

  5. 《剑指offer》把数组排成最小的数

    题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 解析方式一:非常 ...

  6. 【算法】剑指 Offer 45. 把数组排成最小的数 【重刷】

    1.概述 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输入: ...

  7. 剑指Offer之把数组排成最小的数

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

  8. 【LeetCode笔记】剑指 Offer 45. 把数组排成最小的数(Java、字符串、Lambda)

    文章目录 题目描述 思路 && 代码 二刷 题目描述 很 nice 的一道题!花的时间也不会很多,还能复习复习 Lambda- 思路 && 代码 核心思路:如果 x + ...

  9. 力扣—剑指 Offer 45. 把数组排成最小的数

    题目 解决方法 参看官方解决思路,就是将数列中的元素两两拼接.如'2'+'3'='23'<'3'+'2'='32'则2在3的左边.由于该题不用考虑组合后第一位是零的情况,所以这样将所有的元素比较 ...

最新文章

  1. mybatis oracle批量修改
  2. T-SQL基础(三)之子查询与表表达式
  3. MySQL【问题记录 01】报错 1709 - Index column size too large. The maximum column size is 767 bytes. 可能是最简单的方法
  4. android 图片变颜色代码,Android -对图片Drawable进行变色
  5. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性介绍(3)- 命名规则
  6. 白话经典算法系列之——希尔排序的实现
  7. word无法验证服务器,windows10系统下office2010无法验证的解决方法
  8. android Tabhost 组件
  9. OpenGL ES基本用法
  10. php 126 发邮件,解析php中用PHPMailer来发送邮件的示例(126.com的例子)
  11. vs2008安装包及安装教程
  12. 用flash MX 制作 flash video
  13. VB认识强大的ActiveX控件
  14. 通过微信聊天记录生成词云
  15. 数独问题(java)
  16. 公司发给你一个gitLab账号怎么配置项目!
  17. word2010加载MathType打开时显示“安全警告,宏已被禁用”解决办法
  18. 引流软件的操作原理是怎样的,引流软件效果是不是很好?
  19. PhotoScan Google照片扫描仪,让手机替代扫描仪
  20. python做生词本_关于Kindle的生词本,你确定你都完全了解吗?

热门文章

  1. Ubuntu切换用户su和su-的区别
  2. shell 判断执行结果 是否要推出
  3. ubuntu 12.04 nfs-server/client安装配置
  4. 【软件项目管理】需求规格说明可以包括系统的运行环境
  5. 软件开发报价模板_模板类app开发价格是多少钱?
  6. 设置eclipse中xml的默认编辑器、行数、xsd和dtd
  7. Spring构建微服务
  8. perl DBI 总结
  9. Kotlin协程简介(一) Hello,coroutines!
  10. lwip netbuf