def largestNumber(self, num):
num = [str(x) for x in num]
num.sort(cmp=lambda x, y: cmp(y+x, x+y))
return ''.join(num).lstrip('0') or '0'
我想知道的是num.sort行中究竟发生了什么,其中lambda函数接受x和y并执行此cmp()函数。如果有人想要查看此代码https://leetcode.com/problems/largest-number/#/description
,则这是代码正在使用的具体问题答案 0 :(得分:0)
是的,lambda函数完全按照你的建议进行比较:“998”到“989”等。这样,列表项被排序为字典顺序,最大的是第一个。您必须担心连接组合以获得最大数字的正确顺序:'9'与'98'是您需要连接的典型示例,因为您希望结果中包含“998”。
答案 1 :(得分:0)
我建议您使用Visualize python并使用以下代码:
class Solution:
def largestNumber(self, num):
num = [str(x) for x in num]
num.sort(cmp=lambda x, y: cmp(y+x, x+y))
return ''.join(num).lstrip('0') or '0'
print Solution().largestNumber([4,6,2,7,8,2,4,10])
要明确这个概念,
num = [str(x) for x in num]
这将列表num
的每个元素都作为x并将其转换为字符串,结果列表存储为num
num.sort(cmp=lambda x, y: cmp(y+x, x+y))
cmp:
cmp(x,y)¶ 比较两个对象x和y并根据结果返回一个整数。如果x <1,则返回值为负。 y,如果x == y和0则为零 如果x>严格肯定为正收率
可以使用lambda关键字创建小的匿名函数。这个 function返回其两个参数的总和:lambda a,b:a + b。
希望这有帮助!