点击查看剑指Offer全解【Java & Golang】实现
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
将数组中的数字连接起来,排成一个最小的数字。将’大数’往后放’小数’往前放,如何定义’大数’和’小数’?比如说有两个数a和b,如果ab>ba则a是’大数’b是’小数’,要排成ba。
于是,这道题目变成了一个排序问题,将能把组合出来的数字变大的数字往后排。我们这里需要自己定义一个比大小的比较方法。
Java实现
import java.util.*;
public class Solution {
public String PrintMinNumber(int [] numbers) {
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 i1, Integer i2) {
String s1 = i1 + "" + i2;
String s2 = i2 + "" + i1;
return s1.compareTo(s2);
}
});
StringBuilder builder = new StringBuilder();
for (Integer num: list) {
builder.append(num);
}
return builder.toString();
}
}
本文解析了剑指Offer中的一道经典题目:输入一个正整数数组,将数组里的所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。文章详细介绍了题目的解题思路,并提供了Java语言的实现代码。
172万+

被折叠的 条评论
为什么被折叠?



