本文主要是介绍码农小汪-剑指Offer之30 -把数组排成最小的数(拼接字符串排序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路
本题的意思不就是把我们的字符串连接在一起嘛,比较大小。拼接排序就行了。
2 13
132 213 比较排序就知道了,拼接后的什么样的顺序在一起。多个也是一样的啊。两两比较的结果放在一起的嘛,怎么会不行呢!
package JianzhiOffer;import java.util.Arrays;
import java.util.Comparator;public class Slution30 {public String PrintMinNumber(int[] numbers) {String str[] = new String[numbers.length];for (int i = 0; i < numbers.length; i++) {str[i] = String.valueOf(numbers[i]);}/*** 解题思路: 先将整型数组转换成String数组 然后将String数组排序,* 最后将排好序的字符串数组拼接出来。 关键就是制定排序规则。* 排序规则如下: 若ab > ba 则 a > b, 解释说明:* 比如 "3" < "31"但是 "331" > "313",* 所以要将二者拼接起来进行比较*/Arrays.sort(str, 0, str.length, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {// TODO Auto-generated method stubreturn (o1 + 02).compareTo(o2 + o1);}});StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length; i++)sb.append(str[i]);return sb.toString();}}
这篇关于码农小汪-剑指Offer之30 -把数组排成最小的数(拼接字符串排序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!