题目描述

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

思路:这个题实际是考的字符串比大小,字符串是如何比大小?

1 .如果字符串相等返回值为0,不等返回其他数值。
比较方法是先比较对应字符的大小(Ascall吗顺序),从第一个字母开始比较。
     2.如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值(ascii码值)
               (负值前字符串的值小于后字符串,正值前字符串大于后字符串)
     3.如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,
以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度.

我们这里用到的是 第1个:334和3331谁大? 从第一位一直到第三位比较“4>3”故,“334”>“3331”,

程序验证如下:

public class test_2 {public static void main(String[] args) {// TODO Auto-generated method stubString str_1="334";String str_2="3331";//如果相等则返回0,System.out.println(str_1.compareTo(str_2));}}

结果:

我们可以看到,334比3331大1.那么我们就可以做下面这道题了,其实就是比较两个字符串的连接大小

list.sort((a,b)->(a+""+b).compareTo(b+""+a));

上面这句话的意思是,重写list的sort方法:比如 3 32 321 就是做这样一个事,

32132<32321,所以将 321 放在 32 的前面 ,------ 3 321  32

3213<3321 ,所以将 321 放在 3 的前面,------ 321 32 3

以此类推:

package offer_java;import java.util.ArrayList;
import java.util.List;/*输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。*/public class PrintMinNumber {static String PrintMinNumber(int [] numbers) {if (numbers.length==0|| numbers ==null) {return "";}List<Integer> list=new ArrayList<>();for(int a:numbers) {list.add(a);}list.sort((a,b)->(a+""+b).compareTo(b+""+a));StringBuffer stringBuffer=new StringBuffer();for(int a:list) {stringBuffer.append(a);}return stringBuffer.toString();}public static void main(String[] args) {// TODO Auto-generated method stubint [] numbers= {3,32,321};System.out.println(PrintMinNumber(numbers));}}

下面是list.sort的源码:

//从小到大的排序
list.Sort(delegate(int a, int b){return a.CompareTo(b);}
);
//从大到小的排序list.Sort((a, b) =>b.CompareTo(a)); //lamda expression

这种方式适合于字符串等许多类型的排序!

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

  1. 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

    一.344.反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的 ...

  2. 代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符

    一.344.反转字符串 力扣 思路:很简单的一个for循环双指针,left和right交换. class Solution {public void reverseString(char[] s) { ...

  3. 剑指offer06.从尾到头打印链表

    剑指offer06.从尾到头打印链表 1. 改变链表结构的解法 2.可以使用栈,递归,或者直接反向输出数组 提示: 若是面试遇到此题,最好先向面试官确认是否可以改变链表的结构, 1. 改变链表结构的解 ...

  4. 《剑指offer》内容总结

    (1)剑指Offer--Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是统计和排序大量的字符串(但不仅限于字符串),所以经常 ...

  5. python数据结构与算法刷题——剑指offer第二版加部分leetcode题

    说不清楚,只能看代码理解的用红色标出 查找算法:查找较排序来说较简单,不外乎顺序查找和二分查找.哈希表查找和二叉排序树查找.(很多面试官喜欢让应聘者写出二分查找(如test53)的代码)[注意:二分查 ...

  6. 剑指offer所有的题目的总结

    目录 基本都是参考别的博客和书本的代码,仅作为自己笔记用!! 零.小结: 一.位运算 1.二进制中1的个数 2.判断二进制中0的个数 3.二进制高位连续0的个数 二.二叉树 1.二叉搜索树第k个结点 ...

  7. 剑指offer所有的题目总结

    自己找工作过程中进行的整理总结. 参考别的博客和书本的代码进行的总结,作为自己笔记用!! 零.小结: 一.位运算 1.二进制中1的个数 2.判断二进制中0的个数 3.二进制高位连续0的个数 二.二叉树 ...

  8. 剑指offer刷题1-66题-Python3

    文章目录 [剑指offer-Python3]1 判断数组中是否含有某整数. [剑指offer-Python3]2 替换字符串中的空格 [剑指offer-Python3]3 链表反转 [剑指offer- ...

  9. 《剑指offer》解法总结

    剑指offer这本书之前看过一次,今天又在牛客网上完成了最后一道题的编程. 第一次这本书,对于思路和编程都是难点:第二次在牛客网上刷题的时候,越来越感觉编程并非难点,难点在于没有解题思路,下不了手.如 ...

  10. 《剑指Offer(第2版)》读书笔记

    目录 第1章 面试的流程 1.3 面试的3个环节 1.3.1 行为面试环节 1.3.2 技术面试环节 P12:把一个字符串转换成整数 第2章 面试需要的基础知识 2.2 编程语言 2.2.1 C++ ...

最新文章

  1. 【AI-1000问】人脸的4个方向,你还分的清楚吗?
  2. bgp通告四原则_BGP的十三条选路原则
  3. c语言在线编译器_C语言和汇编语言是什么?他们之间可以有怎样的合作?为你解析...
  4. C#各个版本中的新增特性详解
  5. Java中事件驱动程序设计_【JAVA语言程序设计基础篇】--事件驱动程序设计--鼠标事件...
  6. python定义test方法_关于python:使用pytest测试类方法
  7. js 鼠标点击文本框 提示文字消失
  8. php 批量上传图片插件,diyUpload - jQuery多张图片批量上传插件
  9. Proxmark3 Easy破解门禁卡(转载 珍贵知识防止掉失)
  10. Diamond软件的使用(5)--建立Modelsim仿真环境
  11. 哲学家进餐问题 C++实现
  12. python数据分析 - 卡方检验
  13. python简单的构建爬虫ip代理池
  14. html5 canvas实现桌面效果,基于html5 canvas实现漫天飞雪效果实例
  15. word格式文档在linux打开吗,ubuntu 打开word文档 ubuntu word 文档
  16. 读书笔记 - 《经济学通识》
  17. 大规模定制家具实施ERP的必要性
  18. 一篇文让你秒懂CDN
  19. 1分钟读懂猫咪免疫流程:怎么打疫苗,必须打的疫苗有哪些
  20. 要么好好地活着,要么就死得其所

热门文章

  1. 2020 Java 全栈工程师进阶路线图,不可错过
  2. BZOJ2001 HNOI2010 城市建设
  3. 算法的时间复杂度和空间复杂度计算
  4. repo sync error: Exited sync due to fetch errors
  5. openGauss社区成立QA SIG
  6. 18位身份证校验代码
  7. tidb分布式数据库_TiDB如何在分布式数据库中结合OLTP和OLAP
  8. Mybatis关联关系
  9. [TSP-FCOS]Rethinking Transformer-based Set Prediction for Object Detection
  10. 使用Scrapy模拟登陆人人网