本文共 901 字,大约阅读时间需要 3 分钟。
有n个非负整数,将其按照字符串拼接的方式拼接为一个整数。如何拼接可以使得得到的整数最大?
例: 32,94,128,1286,6,71可以拼接除的最大整数为94716321286128思路有很多,这里介绍一下我的。
即遍历列表,选取两个当前拼接起来最大的数,再进行拼接。'''TOPIC: 用贪心算法解决数字拼接的问题author: Bluetime: 2020-08-18QQ: 2458682080'''from functools import cmp_to_keyli = [32, 94, 128, 1286, 6, 71]def xy_cmp(x, y): if x+y < y+x: return 1 elif x+y > y+x: return -1 else: return 0def number_join(li): # 把数字转换为字符串 li = list(map(str, li)) li.sort(key=cmp_to_key(xy_cmp)) # 结束后,li就已经是排好序的字符串了,连接起来即可.如果看不懂,也可以自己用排序方法,进行排序 return "".join(li)#str.join(sequence) 在sequence各个元素之间,用str连接,或者可以说是用str作为分隔符连接各个元素print(number_join(li))# sort是对列表进行排序# key 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序,每次排序前调用# cmp_to_key 将比较函数转换为关键字函数# cmp 自定义比较函数# 比较函数类似于制定了比较规则。
这里用了Python的li.sort(key=cmp_to_key(xy_cmp))
方法,可能有点难理解。有兴趣的可以看看这几篇博客:
当然,没有兴趣的可以按照自己的方法进行排序拼接!
转载地址:http://hbiwi.baihongyu.com/