lintcode_184.最大数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lintcode_184.最大数相关的知识,希望对你有一定的参考价值。

给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。

 注意事项

最后的结果可能很大,所以我们返回一个字符串来代替这个整数。

样例

给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201

思路:

找到首数最大的,然后找其次位最大的。于是考虑转为str数组比较

class Solution:
    """
    @param: nums: A list of non negative integers
    @return: A string
    """
    def largestNumber(self, nums):
        # write your code here
        
        nums_str = []
        for i in nums: nums_str.append(str(i))

        nums_str.sort()
        nums_str.reverse()
        
    
        if int(result) == 0:
            return "0"
        return result
        

提交后发现报错,分析,因为字符串数组比较时“98”>"9"但在排序时,应该把9放在"98"前,因此需要自定义一种比较大小函数

九章参考:

class Solution:    
    # @param num: A list of non negative integers
    # @return: A string
    def largestNumber(self, num):
        nums = sorted(num, cmp=lambda x, y: 1 if str(x) + str(y) < str(y) + str(x) else -1)
        largest = ‘‘.join([str(x) for x in nums])
        i, length = 0, len(largest)
        while i + 1 < length:
            if largest[i] != 0:
                break
            i += 1
        return largest[i:]

lambda 嵌入到其他函数中的匿名函数,重新定义了sorted的比较方式,写法清晰明了

 

以上是关于lintcode_184.最大数的主要内容,如果未能解决你的问题,请参考以下文章

[LintCode] Create Maximum Number 创建最大数

lintcode:快乐数

lintcode:数飞机

LintCode_389 判断数独是否合法

lintcode_59. 最接近的三数之和

LintCode之最长单词