leetcode之Largest Number

来源:互联网 发布:网络电视和智能电视 编辑:程序博客网 时间:2024/04/29 12:01

本来看题目感觉是一个很简单的问题,觉得从第一位数最大的开始排序就好了,正好转换成字符串排序就ok了,结果遇到了1和10这种应该是110最大而不是101最大。又开始修改,用正则把后面的0全去掉,比较剩下的值,1和10就ok了,但是12和121的问题又出来了,应该是12121,而不是12112。重新研究下后一种情况,发现可以包括前一种情况。于是自己写了cmp函数,直接排序。写的不是太好。代码如下:

#coding=utf-8def largestNumber(nums):""":type nums: List[int]:rtype: str"""for i in range(len(nums)):nums[i] = str(nums[i])if nums == []:return '0'def sortlist(a, b):if len(a) > len(b):#比较开始的几位for i in range(0, len(b)):if int(a[i]) > int(b[i]):return -1if int(a[i]) < int(b[i]):return 1else:#比较中间的几位gap = len(a) - len(b)for i in range(gap):if a[i + len(b)] > a[i]:return -1if a[i + len(b)] < a[i]:return 1else:# 比较最后的几位for i in range(len(b)):if int(b[i]) < int(a[i + gap]):return 1if int(b[i]) > int(a[i + gap]):return -1else:return 1if len(a) < len(b):#比较开始的几位for i in range(0, len(a)):if int(a[i]) > int(b[i]):return -1if int(a[i]) < int(b[i]):return 1else:#比较中间的几位gap = len(b) - len(a)for i in range(gap):if b[i + len(a)] > b[i]:return 1if b[i + len(a)] < b[i]:return -1else:# 比较最后的几位for i in range(len(a)):if int(a[i]) < int(b[i + gap]):return -1if int(a[i]) > int(b[i + gap]):return 1else:return 1if len(a) == len(b):for i in range(0, len(a)):if int(a[i]) > int(b[i]):return -1if int(a[i]) < int(b[i]):return 1else:return 1nums = sorted(nums, cmp = lambda x, y:sortlist(x, y))result = ''.join(nums)#全是0的情况if int(result) == 0:return '0'return resultprint largestNumber([0,0,0,0,0])


0 0
原创粉丝点击