剑指offer第45题 把数组排成最小的数

it2024-01-10  59

文章目录

问题描述:解题思路:代码实现:


问题描述:

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

示例 1:

输入: [10,2] 输出: "102"

示例 2:

输入: [3,30,34,5,9] 输出: "3033459"

解题思路:

  这题主要是排序的问题,不过排序的方式需要我们自己定义,我们可以先将数组转换位字符串数组,然后再对字符串进行排序。排序的规则:因为字符串的比较本身就是逐一比较的,所以我们只需要做一些改变即可,假设字符串x和y,当x+y>y+x时x应该排在后面,相反则x应该排在前面。

代码实现:

import java.util.Arrays; import java.util.Comparator; public class t45把数组排成最小的数 { public String minNumber(int[] nums) { String[] strs = new String[nums.length]; for(int i=0; i<strs.length; i++) { strs[i] = nums[i] + ""; } MyComparator mycom = new MyComparator(); Arrays.sort(strs, mycom); StringBuilder sb = new StringBuilder(); for(String str:strs) { sb.append(str); } return sb.toString(); } } class MyComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { if((o1+o2).compareTo(o2+o1)>0) //o1+o2 > o2+o1 return 1; else return -1; } }

提交结果:

最新回复(0)