题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路解析:
方法1:先求出这个数组中所有数字的全排列,然后把每个排列拼接起来,最后求出拼接后数字的最小值。注意整数的拼接变成字符串可以加"";
方法2:采用比较数组中字符串大小的方法。
两个数字m和n能拼接成数字mn和数字nm,如果mn<nm那么说明m应该排在n前面,我们应该打印出mn;反之,如果nm<mn,我们定义n小于m.r如果mn=nm,则表示m和n大小相等。
Java中,compareTO函数能够按照字典顺序将两个字符串相比较,返回一个int型。因此,可以先将整数数组转化为字符串数组,然后再采用Collections.sort()函数排序比较后的字符串大小。
Collections.sort(list,new Comparator<Integer>(){ //根据Comparable指定顺序对list集合排序
public int compare(Integer str1,Integer str2){
String s1 = str1 + "" + str2; //str1和str2都是整数,用 str1 +"" + str2即将整数转化为了字符串
String s2 = str2 + "" + str1;
return s1.compareTo(s2);
}
});
代码1:
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]);
}
Collections.sort(list,new Comparator<Integer>(){
public int compare(Integer str1,Integer str2){
String s1=str1+""+str2;
String s2=str2+""+str1;
return s1.compareTo(s2);
}
});
for(int j:list){
s+=j;
}
return s;
}
}
代码2:
package org.marsguo.offerproject33;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class CompareFunction{
public String PrintMinNumber(int[] numbers){
if(numbers == null || numbers.length == 0)
return "";
int len = numbers.length;
String[] str = new String[len];
StringBuilder stringbuilder = new StringBuilder();
for(int i = 0; i < len; i++){
str[i] = String.valueOf(numbers[i]); //也可用str[i] = "" + numbers[i];将整数数组转化为字符串数组
}
/*在基本数据中,compareTo()是比较两个Character 对象;
在 Boolean中,是用boolean的实例于其它实例进行比较;
在String 中,则是按照字典顺序进行比较,返回的值是一个int 型。*/
Arrays.sort(str,new Comparator<String>(){
@Override
public int compare(String s1,String s2){
String c1 = s1 + s2;
String c2 = s2 + s1;
return c1.compareTo(c2); //在String中,compareTo是按照字典顺序进行比较,返回的值是一个int型。
}
});
for(int i = 0; i < len; i++){
stringbuilder.append(str[i]);
}
return stringbuilder.toString();
}
}
转自https://blog.csdn.net/gg543012991/article/details/52601195