每日一题:LeetCode-179. 最大数
刷题使我快乐,满脸开心.jpg
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目
给定一组非负整数 nums
,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
复制代码
示例 2:
复制代码
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 109
思路
这道问题关键就在于弄明白如何比较两个数字的大小,然后去排序就完事儿了
排序
首先是首位不同时,那么我们其实都知道,越把大的数往前放,那么最终结果越大,所以首位不同很容易比较
首位相同,这里其实分两种情况
第一种是在后续位置上能够发现不同,比如,"456" 和 "454",那我们依然能够用不同位越大,最终越大的原则去判断
第二种是后续位置上没有能够发现不同,比如,"456" 和 "45","453" 和 "45",这两种情况其实还会不同,需要分情况去讨论
但是其实我们有更便捷、心智负担更小的办法,那就是把两个数字用不同的顺序
拼起来
,这样一来,拼起来
哪个数字更大,也就是说明哪个数字应该在前面!
特殊情况
最后要提一下就是小心"0"
这个特殊情况。虽然我们最终要返回的是字符串,但其实我们要返回的是拼起来之后的数字
的字符串表示,所以需要避免前缀 0 这类情况。
至此,也就没有太多可说的了,上代码。
代码
复制代码
欢迎关注公众号交流更多题目~
版权声明: 本文为 InfoQ 作者【半亩房顶】的原创文章。
原文链接:【http://xie.infoq.cn/article/591019ee8a5e27d46e664733c】。文章转载请联系作者。
评论