剑指offer 面试33 把数组排成最小的数
来源:互联网 发布:miss外设淘宝店网址 编辑:程序博客网 时间:2024/06/06 06:29
剑指offer 面试33 把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个,
例如输入数组 {3, 32, 321},则打印出这 3 个数字能排成的最小数字 321323。
package algorithm.foroffer.top40;import java.util.*;/** * Created by liyazhou on 2017/5/30. * 面试题33:把数组排成最小的数 * * 题目: * 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个, * 例如输入数组 {3, 32, 321},则打印出这 3 个数字能排成的最小数字 321323。 * * 考查点: * 1. 字符串排序,// 字典顺序排序(字典序顺序排序,字典序逆序排序) * 2. 比较器 * * 思路: * 1. 将数组中所有的整数转换为字符串 * 2. 比较两个字符串A、B的大小(谁排在前,谁排在后)的原则: * 比较 A+B 和 B+A,让两者按字典序排序的准则,返回大小值(后验), * A、B 依据返回的结果进行排序 */public class Test33 { public static void cancatMinNumber(int[] array){ List<String> dictOrderList = new LinkedList<>(); for (int element: array) dictOrderList.add(element + ""); Collections.sort(dictOrderList, new Comparator<String>(){ @Override public int compare(String o1, String o2) { return (o1+o2).compareTo(o2+o1); } }); for (String num: dictOrderList) System.out.print(num); } public static void main(String[] args){ int[][] arrays = { {3, 32, 323}, {31, 32, 323}, }; for(int[] array: arrays){ System.out.println(Arrays.toString(array)); cancatMinNumber(array); System.out.println(); } }}
和以上大致相同的解法。
(2017-8-15 10:12:35)
import java.util.*;public class Solution { public String PrintMinNumber(int [] numbers) { // List<Integer> list = Arrays.asList(numbers); Integer[] array = new Integer[numbers.length]; for(int i = 0; i < numbers.length; i ++) array[i] = numbers[i]; Comparator<Integer> cmp = new Comparator<Integer>(){ @Override public int compare(Integer t1, Integer t2){ int num1 = Integer.valueOf("" + t1 + t2); // 代表t1放在前面 int num2 = Integer.valueOf("" + t2 + t1); // 代表t2放在前面 int result = 0; if (num1 > num2) result = 1; // 升序排序,t1+t2较大,则t1放后面 else if (num1 < num2) result = -1; // 升序排序,t1+t2较小,则t1放前面 return result; } }; Arrays.sort(array, cmp); StringBuilder s = new StringBuilder(); for (int i = 0; i < array.length; i ++) s.append(array[i]); return s.toString(); }}
阅读全文
1 0
- 剑指offer 面试33 把数组排成最小的数
- 剑指offer面试题目:把数组排成最小的数
- 剑指offer-33:把数组排成最小的数
- 剑指offer 33 把数组排成最小的数
- 《剑指offer》:[33]把数组排成最小的数
- 剑指Offer 33 把数组排成最小的数
- 剑指offer 33 把数组排成最小的数
- 剑指offer-5-面试33:把数组排成最小的数(时间效率)
- 【剑指Offer面试编程题】题目1504:把数组排成最小的数--九度OJ
- 剑指offer:把数组排成最小的数
- 【剑指offer】把数组排成最小的数
- 【剑指offer】Q33:把数组排成最小的数
- 九度《剑指offer》把数组排成最小的数
- 剑指Offer之把数组排成最小的数
- 剑指offer系列源码-把数组排成最小的数
- 剑指offer--把数组排成最小的数
- 剑指offer之把数组排成最小的数
- 《剑指offer》把数组排成最小的数
- windows主机wifi的条件下,linux虚拟机如何进行网络设置
- 分布式相关论文
- spring MVC流程图
- POJ 2586 Y2K Accounting Bug (贪心)
- WindowsJNDI对文件用BufferedReader进行读取
- 剑指offer 面试33 把数组排成最小的数
- 编写一个程序,统计当前文件夹下每个文件类型的文件数
- Hadoop相关书籍
- POJ 3070:Fibonacci
- 使用java反编译查看java生成的exe文件的源码
- 《JAVA程序设计》第二版 黄岚 王岩 王康平编著 学习笔记与错误修正
- AsyncTask的简单使用
- 强\软\弱\虚引用
- Java保留两位小数的几种做法