算法:给定多个数字,把多个数字任意组合,选出组合后最大的数

比如说 1,2,3,最大的数就是321。11,12,13最大的就是131211。如何计算呢:

public static void main(String[] args) {
        
        String[] strs = new String[]{"9", "923", "9239"};
        
        Arrays.sort(strs, new Comparator<String>() {
            public int compare(String o1, String o2) {
                
                if(Math.min(o1.length(), o2.length()) == 0)
                    return 0;
                for (int i = 0; i < Math.min(o1.length(), o2.length()) ; i++) {
                    if (!(o1.charAt(i) == o2.charAt(i)))
                        return o1.charAt(i) - o2.charAt(i);
                }
                return o1.length() < o2.length() ? compare(o1,
                        o2.substring(o1.length())) : compare(
                        o1.substring(o2.length()), o2);
            }
        });
        
        for (String string : strs) {
            System.out.println(string);
        }
    }

使用一个递归。

这题的陷阱在于如果两个数字字符串,前几个字符一样,那么决定顺序的是最早不一样的数字。

但是如果一个包含另一个时,就需要对长的进行截断,取不重复的那一段再比较,以此类推,是一个递归。

转载于:https://www.cnblogs.com/guangshan/p/4698826.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值