题意:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
解题思路
解法1:
1.分析题意,实际上是找一个规则,对数组进行排序,然后将数组拼接为一个字符串,输出即可
2.规则是什么呢?我们知道正常int数组排序,按照大小来排序,现在我们对比两个数字x、y,而是要比较他们组成的数字哪个较大x在前y在后 ??? x在后y在前
,规则我们这里就找到了
3.将数组转换为list<String>链表,然后使用Collections对list进行重新排序,规则按照2来编写即可
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Solution {
public static void main(String[] args) {
System.out.println(minNumber(new int[]{3, 30, 34, 5, 9}));
}
public static String minNumber(int[] nums) {
List<String> list = new ArrayList<String>();
for (int i = 0; i < nums.length; i++) {
list.add(String.valueOf(nums[i]));
}
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (new BigInteger(o1 + o2)
.compareTo(new BigInteger(o2 + o1)) == 1) {
return 1;
} else if (new BigInteger(o1 + o2)
.compareTo(new BigInteger(o2 + o1)) == -1) {
return -1;
} else {
return 0;
}
}
});
StringBuilder builder = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
builder.append(list.get(i));
}
return builder.toString();
}
}
网友评论