19.剑指offer-把数组排成最小的数
来源:互联网 发布:mac safari下载速度慢 编辑:程序博客网 时间:2024/06/18 08:25
1.题目
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
2. 基本思路
我们将输入数组变换成字符串,如果我们能事先对其排序,如{‘3’,’32’,‘321’}排序成{‘321’,‘32’,’3‘},则最后再将排序好的字符串重新串连起来,那么就为要求的输出。
给定数字a,数字b,我们将其变成字符串。ab表示a加在b的前面,ba表示b加在a的前面。如a=’1’ ,b=’23’, 那么ab=’123’,ba=‘231’
新的字符串比较规则如下:
3.代码
- C++
bool cmp(const string&s1,const string&s2) { bool res=true; string t1=s1+s2; string t2=s2+s1; return t1<t2; } string PrintMinNumber(vector<int> numbers) { string res; if(numbers.empty()) { return res; } vector<string> source(numbers.size()); char a[32]; int i=0; for(;i<numbers.size();++i) { sprintf(a,"%d",numbers[i]); source[i]=a; } sort(source.begin(),source.end(),cmp); print(source); res=source[0]; i=1; while(i<source.size()) { res+=source[i++]; } return res; }
- python (python3中重定义比较规则和C++中sort函数不一样;并且python3中list的sort函数取消了cmp这个参数,无法将在函数中定义的规则直接传入,需要借助
functools
# -*- coding:utf-8 -*- import functools def cmp1(a,b): t1=a+b t2=b+a if t1<t2: return -1 elif t1==t2: return 0 elif t1>t2: return 1 class Solution: def PrintMinNumber(self, numbers): # write code here numbers=[str(s) for s in numbers] numbers.sort(key=functools.cmp_to_key(cmp1)) return "".join(numbers)
0 0
- 19.剑指offer-把数组排成最小的数
- 剑指offer-33:把数组排成最小的数
- 剑指offer:把数组排成最小的数
- 【剑指offer】把数组排成最小的数
- 【剑指offer】Q33:把数组排成最小的数
- 九度《剑指offer》把数组排成最小的数
- 剑指Offer之把数组排成最小的数
- 剑指offer系列源码-把数组排成最小的数
- 剑指offer 33 把数组排成最小的数
- 剑指offer--把数组排成最小的数
- 剑指offer之把数组排成最小的数
- 《剑指offer》把数组排成最小的数
- 剑指offer:把数组排成最小的数
- 【剑指Offer】把数组排成最小的数
- 剑指offer—把数组排成最小的数
- 《剑指offer》——把数组排成最小的数
- 【剑指offer】之把数组排成最小的数
- 剑指offer:把数组排成最小的数
- Shell 变量的命名 (二)
- linux平台11gR2 grid安装到执行root.sh时报错
- java实现从尾到头打印链表每个节点的值
- 用Tortoisegit和gitlab服务器交互
- 【MATLB图像处理1】图像任意角度的旋转
- 19.剑指offer-把数组排成最小的数
- Android 认识EventBus轻量级事件总线框架
- Online Learning算法理论与实践
- 蓝桥杯java第八届B组:最大公共子串
- 【转】DESTDIR: GNU Make中的默认约定
- ffmpeg简单实战
- IOS addChildViewController方法使用及注意事项
- 欢迎使用CSDN-markdown编辑器
- JAVA导出excel(JFinal)