clh899 发表于 2015-11-30 08:27:45

[LeetCode][Python]Largest Number

# -*- coding: utf8 -*-
'''
__author__ = 'dabay.wang@gmail.com'
https://oj.leetcode.com/problems/largest-number/
Given a list of non negative integers, arrange them such that they form the largest number.
For example, given , the largest formed number is 9534330.
Note: The result may be very large, so you need to return a string instead of an integer.
===Comments by Dabay===
把所有num都存到一个hash表中,用值来记录出现的次数。
对于,num中很多重复项来说,这样的处理可以节约时间。
定义比较的方法:当两个字符串长度不一样时,把他们互相加到末尾比较。
'''
class Solution:
    # @param num, a list of integers
    # @return a string
    def largestNumber(self, num):
      def compare(num1, num2):
            if len(num1) != len(num2):
                num1,num2 = num1 + num2,num2 + num1
            return [-1, 1]
      d = {}
      for n in num:
            n = str(n)
            if n not in d:
                d = 1
            else:
                d = d + 1
      keys = d.keys()
      keys = sorted(keys, cmp=compare, reverse=True)
      result = ""
      for k in keys:
            result = result + str(k) * d
      result = result.lstrip('0')
      if len(result) == 0:
            return "0"
      else:
            return result

def main():
    s = Solution()
    nums =
    nums =
    #nums =
    print s.largestNumber(nums)

if __name__ == "__main__":
    import time
    start = time.clock()
    main()
    print "%s sec" % (time.clock() - start)
页: [1]
查看完整版本: [LeetCode][Python]Largest Number