剑指offer系列58---把数组排成最小的数
【题目】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
* 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
【思路】1 首先将整数数组转化成字符串数组str;
2 写一个定制排序comparator,对str进行排序。排序后得到的结果321,32,3(<)
排序规则:ab<ba a<b;
ab>ba a>b;
ab=ba a=b
3 得到排序后结果。
****定制排序: int compare(T o1, T o2) :比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
package com.exe11.offer; import java.util.Arrays;
import java.util.Comparator; /**
* 【题目】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
* 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
* 【思路】1 首先将整数数组转化成字符串数组str;
* 2 写一个定制排序comparator,对str进行排序。排序后得到的结果321,32,3(<)
* 排序规则:ab<ba a<b;
* ab>ba a>b;
* ab=ba a=b
* 3 得到排序后结果。
*
* @author WGS
*
*/
public class PrintMinNumberofArray {
public String PrintMinNumber(int [] numbers) {
if(numbers==null ||numbers.length<=0)
return null; StringBuilder sb=new StringBuilder();
String[] str=new String[numbers.length];
//1 转换
for(int i=0;i<numbers.length;i++){
str[i]=numbers[i]+"";
}
//2 写一个定制排序
Comparator com=new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
return (o1+o2).compareTo(o2+o1);
}
};
//3 对str进行排序
Arrays.sort(str, com);
//4 得到排序后的数字
for(int i=0;i<str.length;i++){
sb.append(str[i]);
}
return sb.toString();
} public static void main(String[] args) {
PrintMinNumberofArray p=new PrintMinNumberofArray();
//int[] nums=new int[]{3,32,321};
int[] nums=new int[]{1,12,23,311};
String s=p.PrintMinNumber(nums);
System.out.println(s);
}
}
剑指offer系列58---把数组排成最小的数的更多相关文章
- 剑指 offer set 13 把数组排成最小的数
总结 1. 给定 3, 32, 321 将他们组合成最小的数, 比如 321323 2. 3 -> 333 32 -> 322 321 -> 321 然后再排序
- 【剑指offer】11--旋转数组的最小数字(二分查找)
原创博文,转载请注明出处! # 本文是牛客网<剑指offer>刷题笔记 1.题目 旋转数组的最小数字:输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1 ...
- 剑指offer第二版-3.数组中重复的数
面试题3:数组中重复的数 题目要求: 在一个长度为n的数组中,所有数字的取值范围都在[0,n-1],但不知道有几个数字重复或重复几次,找出其中任意一个重复的数字. 解法比较: /** * Copyri ...
- 剑指offer 06:旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...
- 剑指offer 8:旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...
- 【剑指 Offer】11.旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的 ...
- 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数
题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...
- 剑指 offer set 3 旋转数组的最小数字
总结 1. 没有重复元素的旋转数组可用 logn 时间内求出结果. 解法有两个步骤, 先是求出发生旋转的点(以 array[0] 为支点求得), 然后用正常的二分查找给出结果 2. 有重复元素元素的旋 ...
- 剑指Offer01之二维数组中查找目标数
剑指Offer之二维数组中查找目标数 题目描述 在一个二维数组中(每个一维数组的长度相等),每一行都是从左到右递增的顺序排序,每一列都是从上到下递增的顺序排序,输入这样一个二维数组和一个整数,判断 ...
- 剑指Offer(三十二):把数组排成最小的数
剑指Offer(三十二):把数组排成最小的数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...
随机推荐
- css 包含的图片和style="display:none"可以避免图片加载,可以节省网络流量
从别人那儿学到一招:先记录下来: <head> <meta charset="UTF-8"> <title>Document</title ...
- IOKit找不到问题定义
Xcode511下Undefined symbols for architecture armv7s: "_IOMasterPort", referenced from: ...
- C++ Primer : 第十章 : 泛型算法 之 lambda表达式和bind函数
一.lambda表达式 lambda表达式原型: [capture list] (parameter list) -> retrue type { function body } 一个lambd ...
- Jquery_笔记
1.请确保在 <body> 元素的onload事件中没有注册函数,否则不会触发+$(document).ready()事件.
- 常用的phpstorm设置
1.始终在项目编辑器中显示行号[Show line numbers],可以通过File->Setting->Editor->Appearance->Show line numb ...
- Codeforces Round #124 (Div. 2)
A. Plate Game 如果可以放置一个圆的情况下,先手将圆放置在矩形正中心,那么根据对称性,先手只要放后手的对称的位置即可,也就是先手必胜,否则后手胜. B. Limit 讨论\(n,m\)的大 ...
- hdu3072 强连通+最小树形图
题意:有一个人他要把一个消息通知到所有人,已知一些通知关系:A 能通知 B,需要花费 v,而又知道,如果某一个小团体,其中的成员相互都能直接或间接通知到,那么他们之间的消息传递是不需要花费的,现在问这 ...
- InputStreamReader和OutputStreamWriter
public class ClientSocket { public static void main(String args[]) { String host = "1 ...
- javascript输出图的简单路径
<script> //图的构建 function vnode() { this.visited=0; this.vertex=0; this.arcs=new Array(); } fun ...
- centos6.7 本地yum源配置
[BEGIN] 2016/11/9 21:47:31[root@11g ~]# mount /dev/cdrom /mediamount: block device /dev/sr0 is write ...