每日一题《剑指offer》数组篇之把数组排成最小的数

简介: 每日一题《剑指offer》数组篇之把数组排成最小的数

把数组排成最小的数


难度:中等

描述

输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

例如输入数组[3,32,321],则打印出这三个数字能排成的最小数字为321323。

1.输出结果可能非常大,所以你需要返回一个字符串而不是整数

2.拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0

数据范围

0<=len(numbers)<=100

举例

image.png

解题思路

本题最直观的解法就是求出数组中所有数字的全排列,然后比较所有的排列,最后找到最小的排列,但是时间复杂度为O(n!),所以不是一个好的解法。

换一种思路可以发现,本题实际上希望我们找到一个排序规则,数组根据这个排序规则进行重排之后可以连成一个最小的数字。要确定这样的排序规则,也就是对于两个数字m和n,通过一个规则确定哪个应排在前面。

根据题目要求,我们可以发现,两个数字m和n能拼接成mn和nm,如果mn

若mn>nm,则m大于n

若mn

若mn=nm,则m等于n

根据上述规则,我们需要先把数字转换成字符串再进行比较,因为需要拼接起来。比较完之后按顺序连接成一个字符串即可。

编程实现(java)


import java.util.*;
public class Solution {
    public String PrintMinNumber(int [] numbers) {
        //空数组的情况
        if(numbers == null || numbers.length == 0)
            return "";
        String[] nums = new String[numbers.length];
        //将数字转成字符
        for(int i = 0; i < numbers.length; i++)
            nums[i] = numbers[i] + "";
        //按照重载排序
        Arrays.sort(nums, new Comparator() {
            public int compare(String s1, String s2) {
                return (s1 + s2).compareTo(s2 + s1);
            }
        });
        StringBuilder res = new StringBuilder();
        //字符串叠加
        for(int i = 0; i < nums.length; i++)
            res.append(nums[i]);
        return res.toString();
    }
}




相关文章
用AItium Designer 14 绘制电路图
要使用Altium Designer 14绘制电路图,可以按照以下步骤进行操作: 1. 打开Altium Designer 14软件。 2. 创建一个新的工程:点击“File”(文件)菜单,选择“New”(新建),然后选择“Project”(工程)。在弹出的对话框中,选择一个合适的工程文件夹,并设置工程名称。 3. 在工程中创建一个新的电路图:在左侧的“Projects”(项目)窗格中,展开工程文件夹,右键点击“Schematic”(电路图)文件夹,选择“Add New to Project”(添加新文件到工程)。在弹出的对话框中,选择“Schematic”(电路图),然后设置电路图名称
496 0
|
人工智能 物联网 开发者
.NET技术在现代软件开发中的应用愈发广泛和深入
.NET技术是软件开发的关键支柱,本文分为三部分探讨其创新应用:最新进展如.NET 5/6统一平台、性能提升、跨平台支持增强、云集成优化及开源社区贡献;应用场景涵盖微服务架构、物联网、AI/机器学习、游戏及移动应用开发;未来发展潜力在于持续性能优化、云原生支持、新兴技术集成、生态扩张及教育培训加强。.NET正以其强大适应性和创新潜力引领软件开发的新方向。
245 3
|
存储 人工智能 数据库
通义灵码与云计算平台的融合:基础与概述
在数字化时代,云计算已成为企业和开发者构建应用的核心基石,其高可用性、可扩展性和成本效益等优势重塑了IT架构。通义灵码作为先进的人工智能代码生成工具,能将自然语言转换为高质量代码,大幅提高开发效率。本文将探讨通义灵码与云计算平台的融合,开启开发新纪元。
通义灵码与云计算平台的融合:基础与概述
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在自然语言处理中的应用与挑战
随着人工智能的迅猛发展,深度学习技术已成为推动自然语言处理(NLP)进步的核心力量。本文将深入探讨深度学习在NLP领域的应用,包括语音识别、机器翻译、情感分析等方面,并分析当前面临的主要挑战,如数据稀缺性、模型可解释性等问题。同时,文章还将展望未来发展趋势,为读者提供一个全面而深入的理解视角。
167 27
|
移动开发 HTML5
HTML5文档基本格式
【8月更文挑战第28天】HTML5文档基本格式。
156 4
|
存储 分布式计算 NoSQL
Java中的高效数据分析与处理平台实现
Java中的高效数据分析与处理平台实现
|
JavaScript
TypeScript编译(tsconfig.json配置)
TypeScript编译(tsconfig.json配置)
260 0
|
缓存 安全 前端开发
SpringBoot整合SpringSecurity带图片验证码简单实现
针对把code码放到httpServletRequest中易引发并发问题,考虑之后,实现把code码放入到login的提交表单内,与用户名和密码一起发送。
SpringBoot整合SpringSecurity带图片验证码简单实现
|
存储 Python
Python中的函数未定义的错误
Python中的函数未定义的错误
781 0
|
SQL 存储 Oracle
实验二 体系结构
实验二 体系结构
80 0

热门文章

最新文章