【自定义排序规则】剑指 Offer 45. 把数组排成最小的数
我是小张同学,立志用更简洁的代码做更高效的表达
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 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. 把数组排成最小的数相关推荐
- 【LeetCode】剑指 Offer 45. 把数组排成最小的数
[LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...
- 【LeetCode笔记】剑指 Offer 45. 把数组排成最小的数(Java、字符串、Lambda)
文章目录 题目描述 思路 && 代码 二刷 题目描述 很 nice 的一道题!花的时间也不会很多,还能复习复习 Lambda- 思路 && 代码 核心思路:如果 x + ...
- 力扣—剑指 Offer 45. 把数组排成最小的数
题目 解决方法 参看官方解决思路,就是将数列中的元素两两拼接.如'2'+'3'='23'<'3'+'2'='32'则2在3的左边.由于该题不用考虑组合后第一位是零的情况,所以这样将所有的元素比较 ...
- 【算法】剑指 Offer 45. 把数组排成最小的数 【重刷】
1.概述 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输入: ...
- 《剑指offer》-- 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格
一.把数组排成最小的数: 1.题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为 ...
- 剑指OFFER之把数组排成最小的数(九度OJ1504)
2019独角兽企业重金招聘Python工程师标准>>> 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32 ...
- 《剑指offer》把数组排成最小的数
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 解析方式一:非常 ...
- 剑指Offer之把数组排成最小的数
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 解题思路 把 ...
- 剑指offer:把数组排成最小的数
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 解题思路 依 ...
最新文章
- java不会自动提示_eclispe中打点不会提示的解决方法,以及自动补全
- 小米手机 DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs
- curator分布式锁的基本使用
- linux 从命令行自动识别文件并将其打开的命令
- 拉格朗日插值函数计算机实现流程图,拉格朗日插值实验报告.doc
- 无法安装操作系统,An unexpected error(0) occurred at line 1768 in f:\nt2\base\boot\setup\arcdisp.c....
- 【Gerrit】Add a Member
- 把所有数据库厂商拉在一起,会发生什么?
- python诗歌文件格式处理_Python诗歌的依赖版本语法
- Mand Mobile
- windows下解决Git报错: LF will be replaced by CRLF the next time Git touches it
- 程序员写了个开源软件,完成了舔狗的绝地反杀...
- 基于SpringBoot的分销商城的设计与实现(论文+源码)_kaic
- 小孩发烧请慎用抗病毒类药物!
- JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度
- python接口自动化-token
- 喜马拉雅数据接口 接入 demo PHP版 API
- SpringBoot整合Mybatis未打成jar正常运行,打成jar包,TypeAliases配置失败致使mybatis无法找到实体类的问题
- Android Q 10.1 KeyMaster源码分析(二) - 各家方案的实现
- lisp语言与python_又要头秃?2020 年七大 AI 编程语言大盘点