把数组排成最小的数(输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。)
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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。)相关推荐
- python从键盘输入一个数、判断其是奇数还是偶数_从键盘上任意输入一个正数,判断是奇数还是偶数...
从键盘上任意输入一个4位正整数,然后逆序数输出 intmain(){intn,n1,n2,n3,n4;cin>>n;n1=n/1000;n2=(n%1000)/100;n3=(n%100) ...
- 萌新的Python练习菜鸟100例(十七)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
题目: 输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 分析: · string模块的使用: 字符串实现了所有一般序列的操作,还额外提供了以下列出的一些附加方法. 字符串还支持两种 ...
- C语言编程>第二周 ⑤ 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
例题:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 代码如下: /*程序分析:利用while语句,条件为输入的字符不为'\n'*/ #include "stdio.h& ...
- 任何一个正整数都可以用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 ...
- 如何用matlab找出一组离散数据中的峰值
如何用matlab找出一组离散数据中的峰值 对于一组离散数据,我们经常需要找出其中的峰值,如下一组离散数据: x = [1 2 3 4 3 2 1 5 8 9 17 12 11 5 3 2 1 7 1 ...
- Visual Studio中的第一个Django-Python应用程序
目录 介绍 创建一个项目 添加虚拟环境 结论 介绍 Python是一种非常强大且流行的编程语言,用于机器学习.人工智能.数据科学. 但是,如果您正在考虑使用此python创建一个Web应用程序,它可以 ...
- html拆分单元格成两列,在excel中怎样把一个单元格拆分成两个单元格
excel表格中如何拆分带括号的单元格比如说我有一个表格单元格内容是 :张三李四(000001) 如何将括号内的选中需要拆分的单元格,Ctrl +F把单元格里面的括号或者书名号换成逗号,然后在数据选项 ...
- printf打印数组_(45)C++面试之把数组排成最小的数
// 面试题45:把数组排成最小的数 // 题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼 // 接出的所有数字中最小的一个.例如输入数组{3, 32, 321},则打印出这3 ...
- 输入一个正整数n,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。寻找一种方案,使得剩下的数字组成的新数最小
输入一个正整数n,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数.寻找一种方案,使得剩下的数字组成的新数最小 样例输入 n=178543 s=4 样例输出 13 思路 贪心 由于剩 ...
- [C语言]字符图案:从键盘输入一个正整数n(代表行数),打印如下n行图案。注意第一行左侧不留空白,从第二行开始,每行左侧增加1个空格。请使用数组实现。***** ***** *****
输入 :输入一个正整数n(0 < n <= 70). 输出 :输出n行图案. 输入示例 3 输出示例 ***** ***** ***** 数据范围 输入为int范围的整数 #incl ...
最新文章
- vue指令写在html中的原理,详解Vue中的MVVM原理和实现方法
- 十、给小白看的第三篇Python基础教程
- Java集合篇:Vector
- 解决UIScrollView把uitableviewcell的点击事件屏蔽
- 商业方向的大数据专业_结合当前的人才需求趋势,大数据专业考研时可以选择哪些主攻方向...
- 使用 Dawn 构建 React 项目
- winhex搜索中的偏移问题?请高手指点
- Redis学习手册(Hashes数据类型)
- 数字孪生-输电铁塔及线路的结冰、融化
- Linux 命令 大结
- 虚拟机安装Windows7系统(亲测超详细)
- 51单片机串口中断功能的设置
- Java实现 蓝桥杯 基础练习 特殊的数字
- Ubuntu下安装RabbbitVCS(图形化svn管理工具)-- Ubuntu也有TortoiseSVN
- 中国教育模式的颠覆者--兄弟会
- Audience Insights被下架后,Facebook广告定位的最佳替代方案
- android长按呼出菜单,Android系统下长按菜单的实现方式
- 考虑风光火储的微电网优化调度 考虑风电、光伏、热电机组和储能优化调度,其中负荷考虑冬季或夏季两种场景,并且考虑晴天、多云、雨天、多风和少风场景
- python图片下载器(百度图片)
- Arduino对57步进电机的控制