《剑指offer》把数组排成最小的数
2017-07-13 16:48
204 查看
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解析方式一:非常暴力的方法,不建议这么做。想法就是把数组中的所有数据进行排列组合,然后进行排序,取最小的。
解析二:比较巧妙,直接利用comparator比较器,然后复写compare方法,用s1+s2与s2+s1进行比较,将小的组合放在前面。
解析方式一:非常暴力的方法,不建议这么做。想法就是把数组中的所有数据进行排列组合,然后进行排序,取最小的。
import java.util.*; public class Solution { List<Long> list = new ArrayList<>();//存放所有的组合情况 public String PrintMinNumber(int [] numbers) { if(numbers.length==0){ return ""; } permutation(numbers,0,numbers.length); Collections.sort(list);//对list进行排序,是升序 return list.get(0).toString(); } public void permutation(int [] numbers,int from,int to){//做的全排列 if(from==to){ String s=""; for(int i:numbers){ s+=i; } list.add(Long.parseLong(s)); } for(int i=from;i<to;i++){ swap(numbers,from,i); permutation(numbers,from+1,to); swap(numbers,from,i); } } public void swap(int [] numbers, int from ,int to){ int temp =numbers[from]; numbers[from]=numbers[to]; numbers[to]=temp; } }
解析二:比较巧妙,直接利用comparator比较器,然后复写compare方法,用s1+s2与s2+s1进行比较,将小的组合放在前面。
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class Solution { public String PrintMinNumber(int [] numbers) { int n; String s=""; ArrayList<Integer> list=new ArrayList<Integer>(); n=numbers.length; for(int i=0;i<n;i++){ list.add(numbers[i]);//将数组放入arrayList中 } //实现了Comparator接口的compare方法,将集合元素按照compare方法的规则进行排序 Collections.sort(list,new Comparator<Integer>(){ @Override public int compare(Integer str1, Integer str2) { // TODO Auto-generated method stub String s1=str1+""+str2; String s2=str2+""+str1; return s1.compareTo(s2); } }); for(int j:list){ s+=j; } return s; } }
相关文章推荐
- 剑指Offer(11)旋转数组的最小元素
- 剑指offer 把数组排成最小的数
- 剑指Offer:面试题33——把数组排成最小的数(java实现)(未完待续)
- 剑指offer第6题 ,旋转数组的最小值。
- 剑指Offer面试题33(java版):把数组排成最小的数
- 《剑指offer》刷题笔记(查找和排序):旋转数组的最小数字
- 剑指Offer_11_旋转数组的最小数字
- 剑指Offer:面试题8 :旋转数组的最小数字
- 《剑指offer》把数组排成最小的数
- 《剑指offer》旋转数组的最小数字
- 《剑指offer》牛客网java题解-旋转数组的最小数字
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。剑指Offer(32)
- 剑指Offer - 九度1386 - 旋转数组的最小数字
- 剑指offer——把数组排成最小的数(小技巧)
- 《剑指offer》旋转数组的最小数字
- 剑指Offer面试题8(java版):旋转数组的最小数字
- 剑指offer-33:把数组排成最小的数
- 剑指offer——面试题33:把数组排成最小的数
- 剑指Offer之面试题8:旋转数组中的最小数字
- 剑指offer__03__旋转数组的最小数字