文章目录
问题描述:解题思路:代码实现:
问题描述:
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 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)
return 1;
else
return -1;
}
}
提交结果: