把数组排成最小的数

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

分析:

用到Arrays下的sort(T[] a,Comparator<? super T> c)函数,所以这里先解释一下这个函数。

public static <T> void sort(T[] a,Comparator<? super T> c)   根据指定的比较器引发的顺序对指定的对象数组进行排序。
数组中的所有元素必须通过指定的比较器相互比较 (即c.compare(e1, e2)不能为ClassCastException中的任何元素e1和e2)。
参数类型:
T - 要排序的对象的类
参数:
a - 要排序的数组
c - 比较器确定阵列的顺序。 A null值表示应使用元素' natural ordering '。
异常
ClassCastException - 如果数组包含使用指定比较器不相互比较的元素
IllegalArgumentException - (可选)如果比较方发现违反Comparator合同

解题思路:

将数组中所有的数字的类型全部转为String类型,用数组str存起来。接下来为数组中的字符串排序,排序规则为:将两个字符串拼接,s1+s2和s2+s1,比较拼接的两个字符串的大小(按字典序),如"3"和"32",拼接后为"332"和"323",而"323"小于"332",此时"32"将会被排到"3"前面,两个数比较之后,我们得到了这两个数排列顺序的局部最优,如果所有数都按照这种方法排列,那么数组的排序就按照我们想要的方式达到了局部最优。排列完毕后只需要按顺序将所有的字符串拼接返回即可。

代码:

import java.util.*;public class Solution {public String PrintMinNumber(int [] numbers) {if(numbers.length == 0 || numbers == null){return "";}int len = numbers.length;String[] str = new String[len];for(int i=0; i<len; i++){str[i] = String.valueOf(numbers[i]);}Arrays.sort(str,new Comparator<String>(){public int compare(String s1,String s2){String c1 = s1+s2;String c2 = s2+s1;return c1.compareTo(c2);}});StringBuilder sb = new StringBuilder();for(int i=0; i<len; i++){sb.append(str[i]);}return sb.toString();}
}

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

  1. python从键盘输入一个数、判断其是奇数还是偶数_从键盘上任意输入一个正数,判断是奇数还是偶数...

    从键盘上任意输入一个4位正整数,然后逆序数输出 intmain(){intn,n1,n2,n3,n4;cin>>n;n1=n/1000;n2=(n%1000)/100;n3=(n%100) ...

  2. 萌新的Python练习菜鸟100例(十七)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    题目: 输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 分析: · string模块的使用: 字符串实现了所有一般序列的操作,还额外提供了以下列出的一些附加方法. 字符串还支持两种 ...

  3. C语言编程>第二周 ⑤ 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    例题:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 代码如下: /*程序分析:利用while语句,条件为输入的字符不为'\n'*/ #include "stdio.h& ...

  4. 任何一个正整数都可以用2的幂次方表示

    例如:137=2^7+2^3+2^0,约定a^b可表示为a(b),则137可表示为:2(7)+2(3)+2(0),进一步7=2^2+2+2^0,3=2+2^0.所以137最终可以表示为2(2(2)+2 ...

  5. 如何用matlab找出一组离散数据中的峰值

    如何用matlab找出一组离散数据中的峰值 对于一组离散数据,我们经常需要找出其中的峰值,如下一组离散数据: x = [1 2 3 4 3 2 1 5 8 9 17 12 11 5 3 2 1 7 1 ...

  6. Visual Studio中的第一个Django-Python应用程序

    目录 介绍 创建一个项目 添加虚拟环境 结论 介绍 Python是一种非常强大且流行的编程语言,用于机器学习.人工智能.数据科学. 但是,如果您正在考虑使用此python创建一个Web应用程序,它可以 ...

  7. html拆分单元格成两列,在excel中怎样把一个单元格拆分成两个单元格

    excel表格中如何拆分带括号的单元格比如说我有一个表格单元格内容是 :张三李四(000001) 如何将括号内的选中需要拆分的单元格,Ctrl +F把单元格里面的括号或者书名号换成逗号,然后在数据选项 ...

  8. printf打印数组_(45)C++面试之把数组排成最小的数

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

  9. 输入一个正整数n,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。寻找一种方案,使得剩下的数字组成的新数最小

    输入一个正整数n,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数.寻找一种方案,使得剩下的数字组成的新数最小 样例输入 n=178543 s=4 样例输出 13 思路 贪心 由于剩 ...

  10. [C语言]字符图案:从键盘输入一个正整数n(代表行数),打印如下n行图案。注意第一行左侧不留空白,从第二行开始,每行左侧增加1个空格。请使用数组实现。***** ***** *****

    输入 :输入一个正整数n(0 < n <= 70). 输出 :输出n行图案. 输入示例 3 输出示例 *****  *****   ***** 数据范围 输入为int范围的整数 #incl ...

最新文章

  1. vue指令写在html中的原理,详解Vue中的MVVM原理和实现方法
  2. 十、给小白看的第三篇Python基础教程
  3. Java集合篇:Vector
  4. 解决UIScrollView把uitableviewcell的点击事件屏蔽
  5. 商业方向的大数据专业_结合当前的人才需求趋势,大数据专业考研时可以选择哪些主攻方向...
  6. 使用 Dawn 构建 React 项目
  7. winhex搜索中的偏移问题?请高手指点
  8. Redis学习手册(Hashes数据类型)
  9. 数字孪生-输电铁塔及线路的结冰、融化
  10. Linux 命令 大结
  11. 虚拟机安装Windows7系统(亲测超详细)
  12. 51单片机串口中断功能的设置
  13. Java实现 蓝桥杯 基础练习 特殊的数字
  14. Ubuntu下安装RabbbitVCS(图形化svn管理工具)-- Ubuntu也有TortoiseSVN
  15. 中国教育模式的颠覆者--兄弟会
  16. Audience Insights被下架后,Facebook广告定位的最佳替代方案
  17. android长按呼出菜单,Android系统下长按菜单的实现方式
  18. 考虑风光火储的微电网优化调度 考虑风电、光伏、热电机组和储能优化调度,其中负荷考虑冬季或夏季两种场景,并且考虑晴天、多云、雨天、多风和少风场景
  19. python图片下载器(百度图片)
  20. Arduino对57步进电机的控制

热门文章

  1. java utility工具类怎么导入_Utility.java
  2. java代码实现注册发送邮件激活账户
  3. 左对齐杨辉三角python_什么是左的错误?
  4. 常用数据库分页查询SQL汇总
  5. 正圆锥体空间方程_计算机基础算法(一)——时间与空间复杂度
  6. python求小于n的最大素数_枚举1--求小于n的最大素数
  7. 爬取人民邮电出版社书籍信息
  8. ACM学习历程—HDU 5025 Saving Tang Monk(广州赛区网赛)(bfs)
  9. 502 Bad Gateway错误
  10. c语言二次方程的实根,C程序求二次方程的根