当前位置: 首页 > news >正文

把数组排成最小的数 -- java

题目描述

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

解题思路

可以看成是一个排序问题,在比较两个字符串 S1 和 S2 的大小时,应该比较的是 S1+S2 和 S2+S1 的大小,如果 S1+S2 < S2+S1,那么应该把 S1 排在前面,否则应该把 S2 排在前面。

证明参考《剑指Offer》

代码

import java.util.Arrays;

public class PrintMinNumber {
    public static void printMinNumber(int[] numbers) {
        // 防止特殊输入
        if (numbers == null || numbers.length == 0) {
            return;
        }

        // 以防两个数相加溢出,将int 变成 string
        String[] numberStrings = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            numberStrings[i] = numbers[i] + "";
        }

        Arrays.sort(numberStrings, (s1, s2) -> (s1 + s2).compareTo(s2 + s1));

        StringBuilder sb = new StringBuilder();
        for (String s : numberStrings) {
            sb.append(s);
        }

        System.out.println(sb.toString());
    }

    public static void main(String[] args) {
        int[] numbers = {3 ,32, 321};
        printMinNumber(numbers);
    }
}


来自:
《剑指Offer》
Coding-Interviews/把数组排成最小的数.md at master · todorex/Coding-Interviews

相关文章:

  • 把数字翻译成字符串 -- java
  • jquery highlight高亮插件下载
  • 笔记本电脑彻底删除硬盘数据
  • win10安装跳过创建Microsoft账户
  • 解决 Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot b
  • springboot vue配置跨域访问
  • 解决 [WARNING]: Console output during zsh initialization detected.
  • 解决 vue ui 白屏
  • everything的安装后初始设置
  • Windows 安装vue配置
  • Could NOT find resource [logback-test.xml]
  • setSerializationInclusion(JsonInclude.Include.NON_NULL) 没有作用
  • mac查看电脑安装了多少个jdk
  • vue-cli-service: command not found
  • 1067 - Invalid default value for 的原因之一
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • canvas绘制圆角头像
  • JavaScript类型识别
  • Linux中的硬链接与软链接
  • Python3爬取英雄联盟英雄皮肤大图
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 来,膜拜下android roadmap,强大的执行力
  • 前端面试总结(at, md)
  • 设计模式走一遍---观察者模式
  • 微信小程序填坑清单
  • 用Python写一份独特的元宵节祝福
  • 怎么把视频里的音乐提取出来
  • HanLP分词命名实体提取详解
  • #{}和${}的区别是什么 -- java面试
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (145)光线追踪距离场柔和阴影
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (bean配置类的注解开发)学习Spring的第十三天
  • (k8s中)docker netty OOM问题记录
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (译)2019年前端性能优化清单 — 下篇
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • .bashrc在哪里,alias妙用
  • .net mvc 获取url中controller和action
  • .Net Web窗口页属性
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET分布式缓存Memcached从入门到实战
  • .NET学习全景图
  • @Transaction注解失效的几种场景(附有示例代码)
  • [20170705]diff比较执行结果的内容.txt
  • [BUUCTF 2018]Online Tool(特详解)
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽
  • [CSS]盒子模型
  • [Flexbox] Using order to rearrange flexbox children
  • [HTTP]HTTP协议的状态码
  • [ISCTF 2023]——Web、Misc较全详细Writeup、Re、Crypto部分Writeup
  • [Markdown] 02 简单应用 第二弹
  • [math]判断线段是否相交及夹角