【题目】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
* 例如输入数组{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---把数组排成最小的数的更多相关文章

  1. 剑指 offer set 13 把数组排成最小的数

    总结 1. 给定 3, 32, 321 将他们组合成最小的数, 比如 321323 2. 3    ->   333 32   ->   322 321 ->   321 然后再排序

  2. 【剑指offer】11--旋转数组的最小数字(二分查找)

    原创博文,转载请注明出处! # 本文是牛客网<剑指offer>刷题笔记 1.题目 旋转数组的最小数字:输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1 ...

  3. 剑指offer第二版-3.数组中重复的数

    面试题3:数组中重复的数 题目要求: 在一个长度为n的数组中,所有数字的取值范围都在[0,n-1],但不知道有几个数字重复或重复几次,找出其中任意一个重复的数字. 解法比较: /** * Copyri ...

  4. 剑指offer 06:旋转数组的最小数字

    题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...

  5. 剑指offer 8:旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...

  6. 【剑指 Offer】11.旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的 ...

  7. 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数

    题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...

  8. 剑指 offer set 3 旋转数组的最小数字

    总结 1. 没有重复元素的旋转数组可用 logn 时间内求出结果. 解法有两个步骤, 先是求出发生旋转的点(以 array[0] 为支点求得), 然后用正常的二分查找给出结果 2. 有重复元素元素的旋 ...

  9. 剑指Offer01之二维数组中查找目标数

    剑指Offer之二维数组中查找目标数 题目描述 ​ 在一个二维数组中(每个一维数组的长度相等),每一行都是从左到右递增的顺序排序,每一列都是从上到下递增的顺序排序,输入这样一个二维数组和一个整数,判断 ...

  10. 剑指Offer(三十二):把数组排成最小的数

    剑指Offer(三十二):把数组排成最小的数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...

随机推荐

  1. css 包含的图片和style="display:none"可以避免图片加载,可以节省网络流量

    从别人那儿学到一招:先记录下来: <head> <meta charset="UTF-8"> <title>Document</title ...

  2. IOKit找不到问题定义

    Xcode511下Undefined symbols for architecture armv7s:  "_IOMasterPort", referenced from:     ...

  3. C++ Primer : 第十章 : 泛型算法 之 lambda表达式和bind函数

    一.lambda表达式 lambda表达式原型: [capture list] (parameter list) -> retrue type { function body } 一个lambd ...

  4. Jquery_笔记

    1.请确保在 <body> 元素的onload事件中没有注册函数,否则不会触发+$(document).ready()事件.

  5. 常用的phpstorm设置

    1.始终在项目编辑器中显示行号[Show line numbers],可以通过File->Setting->Editor->Appearance->Show line numb ...

  6. Codeforces Round #124 (Div. 2)

    A. Plate Game 如果可以放置一个圆的情况下,先手将圆放置在矩形正中心,那么根据对称性,先手只要放后手的对称的位置即可,也就是先手必胜,否则后手胜. B. Limit 讨论\(n,m\)的大 ...

  7. hdu3072 强连通+最小树形图

    题意:有一个人他要把一个消息通知到所有人,已知一些通知关系:A 能通知 B,需要花费 v,而又知道,如果某一个小团体,其中的成员相互都能直接或间接通知到,那么他们之间的消息传递是不需要花费的,现在问这 ...

  8. InputStreamReader和OutputStreamWriter

    public class ClientSocket {   public static void main(String args[]) {         String host = "1 ...

  9. javascript输出图的简单路径

    <script> //图的构建 function vnode() { this.visited=0; this.vertex=0; this.arcs=new Array(); } fun ...

  10. centos6.7 本地yum源配置

    [BEGIN] 2016/11/9 21:47:31[root@11g ~]# mount /dev/cdrom /mediamount: block device /dev/sr0 is write ...