一、题目描述

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

二、解题思路

1.最直接的办法就是先求出这个数组中所有数字的全排列,然后把每个排列拼接起来,最后求出拼接起来的数字的最小值。求数组的排列和字符串排列非常相近。根据排列组合知识,n个数字总共有n!个排列。
2.采用比较数组中字符串大小的方法。
根据题目要求,两个数字m和n能拼接成数字mn和数字nm,如果mn<nm那么说明m应该排在n前面,我们应该打印出mn;反之,如果nm<mn,我们定义n小于m.r如果mn=nm,则表示m和n大小相等。
Java中,compareTO函数能够按照字典顺序将两个字符串相比较,返回一个int型。因此,可以先将整数数组转化为字符串数组,然后再采用Collections.sort()函数排序比较后的字符串大小。
 三、java代码(先看方法一,再看方法二就懂了)

public class Solution_33 {/*** 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,* 打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},* 则打印出这三个数字能排成的最小数字为321323。*///方法一,没有使用比较器,使用冒泡排序 24ms 9085kpublic String PrintMinNumber1(int [] numbers) {for(int i=0;i<numbers.length;i++){for(int j=numbers.length-1;j>i;j--){if(compare(numbers[j-1], numbers[j])>0){int temp = numbers[j-1];numbers[j-1] = numbers[j];numbers[j] = temp; }}}String s = "";for(int i=0;i<numbers.length;i++){s+=numbers[i];}return s;}public int compare(int int1,int int2){String str1 = int1+""+int2;String str2 = int2+""+int1;return str1.compareTo(str2);}//方法二、使用比较器public String PrintMinNumber(int [] numbers) {int n = numbers.length;String s = "";ArrayList<Integer> list = new ArrayList<Integer>();for(int i=0;i<n;i++){list.add(numbers[i]);}Collections.sort(list,new Comparator<Integer>() {public int compare(Integer str1,Integer str2){String s1 = str1+""+str2;String s2 = str2+""+str1;return s1.compareTo(s2);}});for(int j:list){s+=j;}return s;}//测试一下public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入一个数组,以“,”,隔开");String str = scanner.nextLine();String [] temp = str.split(",");scanner.close();int[] array = new int[temp.length];for(int i=0;i<array.length;i++){array[i] = Integer.parseInt(temp[i]);}Solution_33 solution_33 = new Solution_33();System.out.println(solution_33.PrintMinNumber(array));}
}

把数组排成最小的数(剑指offer第33题)相关推荐

  1. 旋转数组的最小元素——《剑指offer》

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转.请返回旋转 ...

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

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

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

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

  4. 【剑指offer-Java版】33把数组排成最小的数

    把数组排成最小的数 难点在于比较规则的确定以及比较规则的正确性证明 比如:仅仅是局部的两个数字的顺序较小,如何保证整个数组按此规则进行排序后达到全局的较小 书中关于这一点的证明直接用的反证法,忘的差不 ...

  5. 剑指 Offer 笔记: T45. 把数组排成最小的数

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

  6. 面试题45. 把数组排成最小的数

    题目: 面试题45. 把数组排成最小的数 题解: 1. 题解一: 2. 题解二: * 解题思路:* 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来.关 ...

  7. 33:把数组排成最小的数

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

  8. 算法:把数组排成最小的数

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

  9. 数据结构与算法--将数组排成最小的数

    将数组排成最小的数 题目:输入一个正整数的数组,将数组中所有数字拼接在一起排列成一个新的数,打印能拼接出来的所有数字中最小的一个, 案例:输入数组{12,4,55},则能打印出最小的数组是:12455 ...

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

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

最新文章

  1. Jboot v2.0-rc.12 发布,优化细节问题
  2. UVA 1613 K-Graph Oddity K度图着色 (构造)
  3. python3.5中pdfkit的详细配置与使用
  4. 此应用无法在你的电脑上运行_能直运行iOS应用!苹果新macOS翻车 正式版下载后无法安装...
  5. 利用bladex+avue实现一对多的关系
  6. 关联性挖掘--Apriori算法详解
  7. 王者权志龙回归!支持爱豆壁纸少不了
  8. thinkphp的model模型的设计经验总结
  9. Spring WebSocket入门(一) 转载
  10. Android VLC 加载ass字幕乱码问题
  11. Python3爬虫新手实践及代码、经验分享
  12. 前端程序员应该理解的reduce方法,对你的js能力很有帮助
  13. dockr pull 无法拉取镜像提示找不到注册表
  14. ISA8051内部结构讲解
  15. TCP的核心系列 — SACK和DSACK的实现(六)
  16. 华为轮值CEO郭平:与伙伴同行,打造智能社会五朵云之一
  17. 常用WebServices 天气,IP,邮编,Email,火车时刻表,股票 web接口服务
  18. ABBYY FineReader15下载安装激活及使用常见问题操作技巧
  19. 离散数学学习笔记----一阶逻辑等值演算与推理
  20. 安全设备——IDSIPS

热门文章

  1. 解线性方程组 c语言,C语言解线性方程组
  2. html如何给标题设置边框和底纹,word如何设置文字边框和底纹
  3. celery异步发送邮箱
  4. Java类和对象:private/public/friendly/封装
  5. 《论语别裁》读书笔记
  6. linux centos安装配置prosody
  7. 七夕祝福网页制作_七夕福利 | 程序员土味情话大PK,专属好礼等你拿
  8. 特征点匹配(SIFI)
  9. 大学生创业实战 - 代充的套利故事
  10. LOAP引擎:clickhouse05: 漏斗函数的应用