• [Java] [刷题] 多个整数连接为最大整数问题


    题目

    有n个正整数(n<=20),将它们联接成一排,组成一个最大的多位整数。
    例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213。
    又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613。

    输入

    n
    n个数,0<每个数<2000000000

    3
    13 312 343
    

    输出

    连接成的多位数。

    34331213
    

    解题思路

    这题就是排序问题,只不过是以字符串的形式进行比较,而不是以整数的形式。

    比较原则:两个数,同一位数字大的数排在前面,比如567应排在561前面,66应排在567前面。

    比较流程:

    • 如果两数长度相等,按照原则确定排序。
    • 如果两数长度不相等
      • 没有多出来的部分不相等(如56789,只比较5678
        • 按照原则确定排序
      • 没有多出来的部分相等(如56567
        • 将多出来的部分跟长度较短的那个数比较,重复比较流程

    然而,其实判断一下string1 + string2 < string2 + string1就知道哪个数更大了。

    不过,Java里,小于号和大于号不能用在字符串的比较上,要用"str".compareTo("other-str")来比较。

    package top.qlin.leo;
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sr = new Scanner(System.in);
            String[] numbers = new String[sr.nextInt()];
            for (int i = 0; i < numbers.length; i++) {
                numbers[i] = sr.next();
            }
            sr.close();
    
            /* compare方法里,返回-1代表小于、0代表等于、1代表大于;
             * 但是Arrays.sort()是正向排序,小的放前面,而这题需要将大的放前面。
             * 而后者与前者的的比较刚好是返回大小相反的结果,
             * 因此不是用o1+o2与o2+o1比较,而是用o2+o1与o1+o2比较。
             */
            Arrays.sort(numbers, new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    return (o2 + o1).compareTo(o1 + o2);
                }
            });
            for (String s : numbers) {
                System.out.print(s);
            }
        }
    }
    
    本文为博主原创,禁止转载或摘编。
  • 相关阅读:
    Windows Live Writer介绍及相关问题解决
    阳光盒子火狐浏览器
    Cracking Wifi Wpa-Wpa2 in 5 second——Dumpper V.80.8 +JumpStart+WinPcap
    叮咚recovery——想刷什么包就刷什么包
    vivo s11t线刷救砖过程
    syskey——让你的电脑更加安全
    滑动关机
    QQ空间点赞大法+浏览器自动翻页脚本=点赞根本停不下来
    Kon-boot v2.5介绍与使用方法总结(支持win10)
    Mimikatz的使用心得
  • 原文地址:https://www.cnblogs.com/aixcyi/p/12486607.html
Copyright © 2020-2023  润新知