• 【Offer】[45]【把数组排成最小的数】


    题目描述

      输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如,输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323。
      

    牛客网刷题地址

    思路分析

    1. 对于数字m和n,可以拼接成mn和nm,如果mn<nm,我们定义m小于n。反之则相反。利用这个排序规则,从小排到大即可实现题目要求。
    2. 可以利用Collections.sort中重新定义排序器来重新定义比较规则

    测试用例

    1. 功能测试:输入的数组中有多个数字;输入的数组中的数字有重复的数位;输入的数组中只有一个数字。
    2. 特殊输入测试:表示数组的指针为nullptr指针。

    Java代码

    public class Offer045 {
        public static void main(String[] args) {
            test1();
            test2();
            test3();
            
        }
    
        public static String PrintMinNumber(int [] numbers) {
            return Solution1(numbers);
        }
    
        /**
         * 重新定义大于和小于的比较规则
         * @param numbers
         * @return
         */
        private static String Solution1(int[] numbers) {
            if(numbers==null || numbers.length<=0){
                return "";
            }
            ArrayList<String> list = new ArrayList<String>();
            for(int num : numbers){
                list.add(String.valueOf(num));
            }
            Collections.sort(list,new Comparator<String>(){
                 @Override
                public int compare(String s1,String s2){
                    String a = s1+s2;
                    String b = s2+s1;
                    return a.compareTo(b);
                }
            });
            StringBuffer sb = new StringBuffer();
            for(String str:list){
                sb.append(str);
            }
            return sb.toString();
    
        }
    
        private static void test1() {
            int array[] = {3,32,321};
            String minNum = PrintMinNumber(array);
            System.out.println(minNum);
        }
    
        private static void test2() {
    
        }
        private static void test3() {
    
        }
    }
    

    代码链接

    剑指Offer代码-Java

  • 相关阅读:
    java MessageFormat来生成模板字符串
    linux 用户身份切换
    linux 账号管理
    java 模块化
    mysql 存储过程执行while循环 Lost connection to MySQL server during query
    git 加速
    测试目录
    centos 安装gitblit
    centos7 安装mongoDB
    MySQL 批量修改库、表、列的排序规则,处理数据库大小写不敏感问题。
  • 原文地址:https://www.cnblogs.com/haoworld/p/offer45ba-shu-zu-pai-cheng-zui-xiao-de-shu.html
Copyright © 2020-2023  润新知