目录
一.题目描述
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个(结果以字符串的形式进行返回)。
二.问题分析
1.举例
int[] arr = {3,30,34,5,9};
以上面这个整型数组为例来进行分析,最终排成的结果为“3033459”.
2.解决步骤
(1)首先需要将整型数组转化为字符数组
(2)然后按照指定的排序规则进行排序
(3)最终将排序好的字符数组进行拼接
其中使用到了将整型数字转化为字符的方法:valueOf();
这里对于排序的规则为:如果 strs[i]+strs[i+1] > strs[i+1]+strs[i] 就进行交换;
随便使用任意一种排序方法按照当前规则进行排序;
最后使用StringBuilder或者StringBuffer将字符数组进行拼接,最终为有序的字符串。
三.代码实现
这里排序为了简单。我使用了Arrays中的sort函数,然后指定上面的规则进行排序
代码:
class Solution {
public String minNumber(int[] nums) {
String[] strs = new String[nums.length];
//将整型数组转化为字符串数组
for(int i = 0; i<nums.length; i++){
strs[i] = String.valueOf(nums[i]);
}
//然后按照指定的规则进行排序(这里使用java内部的排序函数)
//这里使用了lambda表达式来指定排序规则
Arrays.sort(strs, (num1, num2) -> (num1+num2).compareTo(num2+num1));
//将排好序的数组转化为字符串并返回
StringBuilder sb = new StringBuilder();
for(String s:strs){
sb.append(s);
}
return sb.toString();
}