我是小张同学,立志用更简洁的代码做更高效的表达


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

示例 1:
输入: [10,2]
输出: “102”

示例 2:
输入: [3,30,34,5,9]
输出: “3033459”

提示:
0 < nums.length <= 100

说明:

输出结果可能非常大,所以你需要返回一个字符串而不是整数
拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0


核心思路:自定义排序规则进行排序, 可以使用快排,也可以使用自带的sort排序函数


内置函数版

class Solution {public:string minNumber(vector<int>& nums) {string res;vector<string>tem;// 将int转换成stringfor(int i = 0; i < nums.size(); i++)tem.push_back(to_string(nums[i]));// 排序、赋值sort(tem.begin(), tem.end(), cmp);for(int i = 0; i < tem.size(); i++)res += tem[i];return res;}static int cmp(string s1, string s2) {return s1+s2 < s2+s1;}
};

快排版

class Solution {public:string minNumber(vector<int>& nums) {vector<string>tem;string res;// 将int转换成stringfor(int i = 0; i < nums.size(); i++)tem.push_back(to_string(nums[i]));// 排序、赋值quickSort(tem, 0, tem.size()-1);for(int i = 0; i < tem.size(); i++)res += tem[i];return res;}private:void quickSort(vector<string>& tem, int l, int r) {if(l >= r) return;int temp = l;int left = l, right = r;while(left < right) {while(tem[right] + tem[temp] >= tem[left] + tem[temp] && left < right) right--;while(tem[left] + tem[temp] <= tem[right] + tem[temp] && left < right) left++;swap(tem[left], tem[right]);}swap(tem[temp], tem[left]);quickSort(tem, l, left - 1);quickSort(tem, left + 1, r);}
};

有志者,事竟成,破釜沉舟,百二秦关终属楚。

苦心人,天不负,卧薪尝胆,三千越甲可吞吴。

【自定义排序规则】剑指 Offer 45. 把数组排成最小的数相关推荐

  1. 【LeetCode】剑指 Offer 45. 把数组排成最小的数

    [LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...

  2. 【LeetCode笔记】剑指 Offer 45. 把数组排成最小的数(Java、字符串、Lambda)

    文章目录 题目描述 思路 && 代码 二刷 题目描述 很 nice 的一道题!花的时间也不会很多,还能复习复习 Lambda- 思路 && 代码 核心思路:如果 x + ...

  3. 力扣—剑指 Offer 45. 把数组排成最小的数

    题目 解决方法 参看官方解决思路,就是将数列中的元素两两拼接.如'2'+'3'='23'<'3'+'2'='32'则2在3的左边.由于该题不用考虑组合后第一位是零的情况,所以这样将所有的元素比较 ...

  4. 【算法】剑指 Offer 45. 把数组排成最小的数 【重刷】

    1.概述 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输入: ...

  5. 《剑指offer》-- 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格

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

  6. 剑指OFFER之把数组排成最小的数(九度OJ1504)

    2019独角兽企业重金招聘Python工程师标准>>> 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32 ...

  7. 《剑指offer》把数组排成最小的数

    题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 解析方式一:非常 ...

  8. 剑指Offer之把数组排成最小的数

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

  9. 剑指offer:把数组排成最小的数

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

最新文章

  1. java不会自动提示_eclispe中打点不会提示的解决方法,以及自动补全
  2. 小米手机 DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs
  3. curator分布式锁的基本使用
  4. linux 从命令行自动识别文件并将其打开的命令
  5. 拉格朗日插值函数计算机实现流程图,拉格朗日插值实验报告.doc
  6. 无法安装操作系统,An unexpected error(0) occurred at line 1768 in f:\nt2\base\boot\setup\arcdisp.c....
  7. 【Gerrit】Add a Member
  8. 把所有数据库厂商拉在一起,会发生什么?
  9. python诗歌文件格式处理_Python诗歌的依赖版本语法
  10. Mand Mobile
  11. windows下解决Git报错: LF will be replaced by CRLF the next time Git touches it
  12. 程序员写了个开源软件,完成了舔狗的绝地反杀...
  13. 基于SpringBoot的分销商城的设计与实现(论文+源码)_kaic
  14. 小孩发烧请慎用抗病毒类药物!
  15. JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度
  16. python接口自动化-token
  17. 喜马拉雅数据接口 接入 demo PHP版 API
  18. SpringBoot整合Mybatis未打成jar正常运行,打成jar包,TypeAliases配置失败致使mybatis无法找到实体类的问题
  19. Android Q 10.1 KeyMaster源码分析(二) - 各家方案的实现
  20. lisp语言与python_又要头秃?2020 年七大 AI 编程语言大盘点

热门文章

  1. Chromium Android开发的Eclipse配置
  2. 后悔!我早该把这1W字详解的 InnoDB 原理给你!
  3. 【线上分享】WebRTC传输与服务质量
  4. Linux AV1硬件视频解码将支持Intel Tiger Lake
  5. 5月19-20日WebRTCon 2018 梳理全球WebRTC技术实践与案例
  6. 微信基于时间序的海量存储扩展性与多机容灾能力提升
  7. 沙龙报名 | 数据库技术探索及行业应用
  8. VT-x/AMD-V 硬件加速器已被启动,但当前处于无效状态
  9. 安装CocoaPod
  10. 处理对象的多种状态及其相互转换——状态模式