【每日一道算法题】给定一个数组由一些非负整数组成,现需要将他们进行排列并拼接,使得最后的结果最大,返回值需要是string类型 否则可能会溢出.

607 阅读1分钟

给定一个数组由一些非负整数组成,现需要将他们进行排列并拼接,使得最后的结果最大,返回值需要是string类型 否则可能会溢出.

示例1 [30,1] 输出 "301"

题解:
    1.首先题目给的是整型数组,我们先将整型数组转化为字符串数组
    2.其次将字符串数组排序,两个字符串之间比较大小的是比较每一个字符的大小,
    遇到第一个不相等的字符则会根据其ASCII码来比较大小,
    我们都知道整型数字越大,ASCII码也越大,所以我们只需要比较A+BB+A之间的大小,
    从而确定两个字符串是否换位置。
    3.排序好的数组如果第一位是0直接输出“0”即可
    

解法一: Collections辅助排序

import java.util.*;


public class Solution {
    /**
     * 最大数
     * @param nums int整型一维数组 
     * @return string字符串
     */
    public String solve (int[] nums) {
        ArrayList<String> list = new ArrayList<String>();
        for(int i=0;i<nums.length;i++){
            list.add(String.valueOf(nums[i]))
        }
        if(list.size==0){
            return;
        }
        Collections.sort(list,new Comparetor<String>(){
            @Override
            public int compare(String a,String b){
                return (b+a).compraeTo(a+b);//降序排列
            }
        });
        
        if(list.get(0).equals("0"))return "0";
        
        StringBuilder res = new StringBuilder();
        for(int i=0;i<list.size;i++){
            res.append(list.get(i));
        }
        return res.toString();
    }
}