把数组排成最小的数
来源:互联网 发布:淘宝天猫怎么申请 编辑:程序博客网 时间:2024/06/16 12:48
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
第一种思路,就是先求出数组的所有排列,然后求排列中最小的数
import java.util.*;public class Solution { public static String PrintMinNumber(int [] numbers) { if (numbers.length == 0) return ""; String[] cas = new String[numbers.length]; for (int i = 0; i < numbers.length; i++) { cas[i] = String.valueOf(numbers[i]); } ArrayList<String> strings = Permutation(cas); String mmin = Check(strings); return mmin; } private static String Check(ArrayList<String> strings) { long mmin = Long.MAX_VALUE; for (int i = 0; i < strings.size(); i++) { mmin = Math.min(mmin, Long.valueOf(strings.get(i))); } return String.valueOf(mmin); } public static ArrayList<String> Permutation(String[] str) { ArrayList<String> list = new ArrayList<>(); if (str == null||str.length == 0) return list; HashSet<String> set = new HashSet<>(); change(set, 0, str); list.addAll(set); Collections.sort(list); return list; } private static void change(HashSet<String> set, int k, String[] chars) { if (k == chars.length) { String cas = ""; for (int i = 0; i < chars.length; i++) cas += chars[i]; set.add(cas); return; } else { for (int i = k; i < chars.length; i++) { swap(chars, k, i); change(set, k+1, chars); swap(chars, k, i); } } } private static void swap(String[] chars, int i, int j) { if (i != j) { String tmp = chars[i]; chars[i] = chars[j]; chars[j] = tmp; } }}
另一种,制定排序规则
//先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来public class Solution { public static String PrintMinNumber(int [] numbers) { if (numbers.length == 0) return ""; String result = ""; ArrayList<Integer> list = new ArrayList<>(); for (int i = 0; i < numbers.length; i++) list.add(numbers[i]); Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { String s1 = o1+""+o2; String s2 = o2+""+o1; return s1.compareTo(s2); } }); for (int j:list) { result += j; } return result; } //测试 public static void main(String[] args) { int[] numbers = {3, 32, 321}; System.out.println(PrintMinNumber(numbers)); }}
或
//先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来public class Solution { public static String PrintMinNumber(int [] numbers) { if (numbers.length == 0) return ""; String result = ""; String[] str = new String[numbers.length]; for (int i = 0; i < numbers.length; i++) { str[i] = String.valueOf(numbers[i]); } Arrays.sort(str, new Comparator<String>() { @Override public int compare(String o1, String o2) { String s1 = o1+o2; String s2 = o2+o1; return s1.compareTo(s2); } }); for (int i = 0; i < str.length; i++) { result += str[i]; } return result; } //测试 public static void main(String[] args) { int[] numbers = {3, 32, 321}; System.out.println(PrintMinNumber(numbers)); }}
阅读全文
0 0
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数--总结
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 《JavaScript高级程序设计》创建对象之原型模式
- 弹性盒子Flex布局
- go 语言 获取物理机器主要参数
- java学习路线,你跑到哪儿了?
- Spring MVC和Struts2的比较
- 把数组排成最小的数
- 给定两个整形变量的值,在不创建临时变量的前提下,交换两个数的内容
- 对C++中的this指针的分析
- 记TP-Link面试被问到的问题
- 两张表用UNION关键字组合,用zTree显示树
- 丑数
- 这条街MV高清视频,熟悉的旋律很好听
- pycharm远程配置
- hdu 3766 Knight's Trip(并不是bfs)