import java.util.*; import java.util.stream.Collectors; /** * NC270 把数组排成最小的数 * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 相似 -> NC85 拼接所有的字符串产生字典序最小的字符串 [nowcoder] * * @param numbers int整型一维数组 * @return string字符串 */ public String PrintMinNumber (int[] numbers) { // int[] -> Integer[] // return solution1(Arrays.stream(numbers).boxed().toArray(Integer[]::new)); // int[] -> List<String> return solution2(Arrays.stream(numbers).mapToObj(String::valueOf).collect(Collectors.toList())); // int[] -> List<String> // return solution2(Arrays.stream(numbers).boxed().map(String::valueOf).collect(Collectors.toList())); } /** * 贪心+排序 * @param numbers * @return */ private String solution1(Integer[] numbers){ // "32" "321" // 直接比较字典 32<321 => 32321 // 连接比较字典 32>321(32321>32132) => 32132 // 升序 // Arrays.sort(numbers, (o1, o2) -> (String.valueOf(o1)+String.valueOf(o2)).compareTo(String.valueOf(o2)+String.valueOf(o1))); Arrays.sort(numbers, new Comparator<Integer>(){ @Override public int compare(Integer o1, Integer o2){ return (String.valueOf(o1)+String.valueOf(o2)).compareTo(String.valueOf(o2)+String.valueOf(o1)); } }); StringBuilder sb = new StringBuilder(); for(Integer num: numbers){ sb.append(num); } return sb.toString(); } /** * 贪心+排序 * @param numbers * @return */ private String solution2(List<String> numbers){ // "32" "321" // 直接比较字典 32<321 => 32321 // 连接比较字典 32>321(32321>32132) => 32132 // 升序 // Collections.sort(numbers, (o1, o2) -> (o1+o2).compareTo(o2+o1)); numbers.sort((o1, o2) -> (o1+o2).compareTo(o2+o1)); StringBuilder sb = new StringBuilder(); for(String num: numbers){ sb.append(num); } return sb.toString(); } }