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

把数组排成最小的数_牛客网

https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&tqId=11185&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

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

之前没有做过这道题目,刚开始的时候想要进行暴力破解,但是最终想想还是算了吧,因此只能求助于别人的优秀的做法,果然这道题目的关键就是自己所想的那样,如何将各个元素从小到大进行排序,排序之后再把他们串联起来就可以了,简直是非常的机智,非常的完美呀。

http://blog.csdn.net/fanzitao/article/details/7895344
只是看一下解析,比较关键的一句话 所以在这里自定义一个比较大小的函数,比较两个字符串s1, s2大小的时候,先将它们拼接起来,比较s1+s2,和s2+s1那个大,如果s1+s2大,那说明s2应该放前面,所以按这个规则,s2就应该排在s1前面。 ,突然大悟。

import java.util.ArrayList;
public class Solution {

    public Strin

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

小白刷剑指offer 文章被收录于专栏

跟着小白一起刷剑指offer,通过讨论加深印象吧~ 没有人不学习就能够掌握知识,知识就是需要学习的~

全部评论
在你的基础上改了一下,也不知道有没有好一点,请批评指正 public class Solution { public String PrintMinNumber(int [] number) { if(number==null||number.length==0) return ""; for(int i=0;i<number.length;i++){ for(int j=i+1;j<number.length;j++){ String sum1=String.valueOf(number[i])+String.valueOf(number[j]); String sum2=String.valueOf(number[j])+String.valueOf(number[i]); if(sum1.compareTo(sum2)>0){ int temp=number[i]; number[i]=number[j]; number[j]=temp; } } } String str=""; for(int i=0;i<number.length;i++) str=str+String.valueOf(number[i]); return str; } }
7 回复 分享
发布于 2020-03-25 17:43
int sum1 = Integer.valueOf(numbers[i]+""+numbers[j]) 有数据溢出的风险吧?如果两个都是很大的数的int值相连得到的数的位数可能超出int的表示范围
4 回复 分享
发布于 2020-01-19 17:59
您没有考虑int的最大存储范围
3 回复 分享
发布于 2020-02-02 18:22
不用每次比较后都交换位置吧,既然是用的选择排序,那可以在遍历的时候记录最小的数的索引,遍历完成后再和头上的值交换
1 回复 分享
发布于 2020-10-05 12:07
字符串也是按字典顺序比较的, 为何要转int呢
点赞 回复 分享
发布于 2021-05-07 22:53
直接把string转换为int比较容易数据溢出,直接拿string比较鲁棒性更强。
点赞 回复 分享
发布于 2020-05-21 23:30
int的范围-2^31——2^31-1,会出现数据溢出
点赞 回复 分享
发布于 2020-02-21 15:50

相关推荐

不愿透露姓名的神秘牛友
07-04 18:25
点赞 评论 收藏
分享
06-11 13:34
门头沟学院 C++
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
评论
96
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务