[leetcode] Largest Number

Problem Description:

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

太久没有做题,拿到问题后就写代码,总是漏洞百出。

刚看到这个题目时我的想法是,自己定义一个满足题目要求的比较函数,然后对整个数组进行排序即可。这个思路大体上是对的,但是仍有很多细节需要注意。

首先,我曾单纯地以为一个直接按照string的方式比较这些数字就可以满足题目的要求,但是发现不对劲的是,按照题目意思“9”和“98”相比应该“9”更大。于是我就把两个数字先转换成组成它们每位数字的数组,然后自己写了一个满足上述那种情况的比较函数。

然而,事情似乎并没有这么简单,另外一个例子完全证明了上面的比较方法是错误的,那就是“21”和“212”。如果按照长度短的更大的规则,即“9”比“98”大的话,那“21”就比“212”大,这两个数字得到的largest number就是“21212”,可是很明显“21221”会更大。

看完这个例子,我就豁然开朗了,上面的比较方法完全是错误的,我们可以把两个字符串拼接起来进行比较。即num1表示成字符串“a1a2...ai”,num2表示成字符串“b1b2...bj”,我们把num1和num2的比较定义为“a1a2...aib1b2...bj”和“b1b2...bja1a2...ai”的比较即可。

最后,还有一个特例需要处理。因为题目要求最后返回的是一个number,所以“00”是不符合要求的。我又愚蠢地去遍历最后返回的结果,把前面多余的0全部去掉。后来才发现,只要第一个数字是0的话,直接返回“0”好了,因为0的后面不可能有更大的数字了,我在愚蠢的遍历时还以为会出现“00123”呢!(⊙﹏⊙)b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值