import java.util.*;
import java.util.stream.Collectors;

/**
 * NC111 最大数
 * @author d3y1
 */
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 相似 -> NC270  把数组排成最小的数                     [nowcoder]
     * 相似 -> NC85   拼接所有的字符串产生字典序最小的字符串    [nowcoder]
     *
     * 最大数
     * @param nums int整型一维数组
     * @return string字符串
     */
    public String solve (int[] nums) {
        // return solution1(Arrays.stream(nums).boxed().toArray(Integer[]::new));
        return solution2(Arrays.stream(nums).boxed().map(String::valueOf).collect(Collectors.toList()));
    }

    /**
     * 排序: Integer[]
     * @param nums
     * @return
     */
    private String solution1(Integer[] nums){
        Arrays.sort(nums, new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2){
                return (String.valueOf(o2)+String.valueOf(o1)).compareTo(String.valueOf(o1)+String.valueOf(o2));
            }
        });

        StringBuilder sb = new StringBuilder();
        for(int num: nums){
            sb.append(num);
        }

        String result = sb.toString();
        // 去掉 前导0
        if(result.startsWith("0")){
            result = result.replaceFirst("^0+", "");
        }

        return "".equals(result)?"0":result;
    }

    /**
     * 排序: List<String>
     * @param nums
     * @return
     */
    private String solution2(List<String> nums){
        Collections.sort(nums, (o1, o2) -> (o2+o1).compareTo(o1+o2));

        StringBuilder sb = new StringBuilder();
        for(String num: nums){
            sb.append(num);
        }

        String result = sb.toString();
        // 去掉 前导0
        if(result.startsWith("0")){
            result = result.replaceFirst("^0+", "");
        }

        return "".equals(result)?"0":result;
    }
}