剑指offer-把数组排成最小的数
程序员文章站
2024-03-24 10:03:34
...
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
对字符串数组进行排序,按照s1+s2 < s2+s1的顺序进行排,之前左神的视频里有讲这道题,其实是一种贪心算法
import java.util.Comparator;
import java.util.Arrays;
public class Solution {
public String PrintMinNumber(int [] numbers) {
//把整数数组转换成字符串数组,让两个字符串相加最小的放在前面
String[] strnum = new String[numbers.length];
for(int i = 0;i < numbers.length;i++){
strnum[i] = String.valueOf(numbers[i]);
}
//lambda表达式来进行
//Arrays.sort(strnum,(s1,s2)->(s1+s2).compareTo(s2+s1);
Arrays.sort(strnum,new Comparator<String>(){
public int compare(String o1,String o2){
return (o1+o2).compareTo(o2+o1);
}
});
StringBuilder res = new StringBuilder("");
for(String str : strnum){
res.append(str);
}
return res.toString();
}
}
这种排序规则的证明使用反证法
上一篇: 1.1.1UI绘制流程及原理——View是如何被添加到屏幕窗口上
下一篇: UI绘制流程详解(2)
推荐阅读
-
《剑指offer》把数组排成最小的数
-
leetcode:剑指 Offer 45. 把数组排成最小的数(学习python,对python的自定义cmp很懵逼呀)
-
剑指offer-把数组排成最小的数
-
LeetCode—剑指Offer:把数组排成最小的数(快速排序)
-
剑指offer - 找到数组中两个只出现一次的数
-
《剑指offer》-递增数组中找到和为S的(最小)两个元素
-
《剑指offer》--011--旋转数组中的最小数字
-
[PHP] 算法-把数组排成最小的数的PHP实现
-
【剑指Offer】最小的K个数:[数组][高级算法]
-
剑指offer 56 数组中数字出现的次数 lintcode 82. 落单的数、83. 落单的数 II、84. 落单的数 III