数据结构(python) —— 【31: 贪心算法之数字拼接问题】

贪心算法之数字拼接问题

1. 问题

有n个非负整数,将其按照字符串拼接的方式拼接为一个整数。如何拼接可以使得得到的整数最大?
例: 32,94,128,1286,6,71可以拼接除的最大整数为94716321286128

2. 思路

思路有很多,这里介绍一下我的。
即遍历列表,选取两个当前拼接起来最大的数,再进行拼接。

3. 代码
'''
TOPIC: 用贪心算法解决数字拼接的问题
author: Blue
time: 2020-08-18
QQ: 2458682080
'''

from functools import cmp_to_key

li = [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 0


def 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))方法,可能有点难理解。有兴趣的可以看看这几篇博客:
1. Python中sort、sorted的cmp参数废弃之后使用cmp_to_key实现类似功能
2. Python_sort函数结合functools.cmp_to_key(func)分析

当然,没有兴趣的可以按照自己的方法进行排序拼接!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值