尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

剑指offer-32、把数组排成最⼩的数

剑指offer-32、把数组排成最⼩的数
📅 发布时间:2026/6/19 0:09:17

题⽬描述

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

示例1
输⼊:[3,32,321]
返回值:"321323"

思路及解答

自定义排序(推荐解法)

这道题要求拼起来的数是最⼩的数字,其实是⼀个排序问题,只要理解了这⼀点,就可以快速解决。

假设有两个字符串 s1=3 , s2=32 ,那 s1+s2=332 , s2+s1=323 ,也就是 s1+s2>s2+s1 。

像上⾯这种情况,要想拼接起来的数最⼩,肯定是 s2 在前⾯, s1 在后⾯。

⽽在数组中,我们要使所有的拼接起来是最⼩,则需要两两⽐较,类似排序,把满⾜ s1+s2>s2+s1 的s1 放到后⾯, s2 放到前⾯。

public class Solution {public String PrintMinNumber(int [] numbers) {String[] strs = new String[numbers.length];for(int i = 0; i < numbers.length; i++)strs[i] = String.valueOf(numbers[i]);Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x));StringBuilder res = new StringBuilder();for(String s : strs)res.append(s);return res.toString();}}
  • 时间复杂度 : O(nlogn) , n 为 nums 数组的⻓度,使⽤内置排序函数的平均时间复杂度为O(nlogn) ,最差为 O(n2 ) 。
  • 空间复杂度: O(N)

手动实现快速排序

我们也可以不依赖内部排序,自己手动实现

public class Solution {public String PrintMinNumber(int[] numbers) {if (numbers == null || numbers.length == 0) return "";String[] strs = new String[numbers.length];for (int i = 0; i < numbers.length; i++) {strs[i] = String.valueOf(numbers[i]);}// 手动实现快速排序quickSort(strs, 0, strs.length - 1);StringBuilder sb = new StringBuilder();for (String s : strs) {sb.append(s);}return sb.toString();}private void quickSort(String[] strs, int left, int right) {if (left >= right) return;int pivotIndex = partition(strs, left, right);quickSort(strs, left, pivotIndex - 1);quickSort(strs, pivotIndex + 1, right);}private int partition(String[] strs, int left, int right) {String pivotValue = strs[right];int i = left;for (int j = left; j < right; j++) {// 使用自定义比较规则if ((strs[j] + pivotValue).compareTo(pivotValue + strs[j]) <= 0) {swap(strs, i, j);i++;}}swap(strs, i, right);return i;}private void swap(String[] strs, int i, int j) {String temp = strs[i];strs[i] = strs[j];strs[j] = temp;}
}

本文来自在线网站:seven的菜鸟成长之路,作者:seven,转载请注明原文链接:www.seven97.top

相关新闻

  • python微博舆情分析系统 情感分析 爬虫 机器学习 新浪微博 信息采集 大数据工艺(源码)✅
  • C# 中的 ReferenceEquals 方法 - 教程
  • 【一周AI资讯】Claude自动抓取网页;美团发布生活Agent;阿里通义发布双模型 - 详解

最新新闻

  • 2026扬州本地人必选防水补漏检测维修公司靠谱服务商TOP5推荐:房屋渗漏水检测维修/卫生间/厨房/天花板/阳台/外墙渗漏水检测补漏维修-暗管漏水检测专业仪器精准定位漏水点 - 即刻修防水
  • 2026株洲各区县黄金回收测评 大盘金价透明无隐形扣费门店 - 润富黄金回收
  • Selenium八大元素定位方法全解析:从原理到实战,解决自动化测试核心难题
  • 2026黄冈最新黄金回收价格参考表及无套路商家推荐 - 润富黄金回收
  • 杭州琳弘湾万金汇金裕恒福满多黄金回收门店实测 - 润富黄金回收
  • 按摩椅双推杆泰式拉筋与普通拉伸效果差异先对照推杆行程与拉伸角度 - 新闻快传

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号