本文主要是介绍剑指offer: 把数组排成最小的数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
重写Comparator比较器
实现了Comparator接口的compare方法,将集合元素按照compare方法的规则进行排序
import java.util.*;public class Solution {public String PrintMinNumber(int [] numbers) {if(numbers.length==0) return "";ArrayList<String> strList=new ArrayList<String>();for(int i=0;i<numbers.length;i++){strList.add(String.valueOf(numbers[i]));}Collections.sort(strList,new Comparator<String>(){public int compare(String s1,String s2){return Integer.parseInt(s1+s2)-Integer.parseInt(s2+s1); }});StringBuffer sb=new StringBuffer();for(String str:strList){sb.append(str);}return sb.toString();}
}
二重遍历组装数组然后排序
将当前的numbers[i]分别和后面的组装成新数排序,如果a大那么将 numbers[i]和numbers[j]调换位置
import java.util.ArrayList;public class Solution {public String PrintMinNumber(int [] numbers) {if(numbers==null||numbers.length==0) return "";for(int i=0;i<numbers.length;i++){for(int j=i+1;j<numbers.length;j++){int a=Integer.parseInt(numbers[i]+""+numbers[j]);int b=Integer.parseInt(numbers[j]+""+numbers[i]);if(a>b){int temp=numbers[j];numbers[j]=numbers[i];numbers[i]=temp;}}}StringBuffer sb=new StringBuffer();for(int i:numbers){sb.append(i);}return sb.toString();}
}
这篇关于剑指offer: 把数组排成最小的数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!