博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构(python) —— 【31: 贪心算法之数字拼接问题】
阅读量:3944 次
发布时间:2019-05-24

本文共 901 字,大约阅读时间需要 3 分钟。

贪心算法之数字拼接问题

1. 问题

有n个非负整数,将其按照字符串拼接的方式拼接为一个整数。如何拼接可以使得得到的整数最大?

例: 32,94,128,1286,6,71可以拼接除的最大整数为94716321286128

2. 思路

思路有很多,这里介绍一下我的。

即遍历列表,选取两个当前拼接起来最大的数,再进行拼接。

3. 代码

'''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/

你可能感兴趣的文章
CentOS 7系统上制作Clonezilla(再生龙)启动U盘并克隆双系统
查看>>
fail2ban的使用-控制连接数
查看>>
btkill-连接数控制
查看>>
dhcp.conf
查看>>
关于win10的升级
查看>>
cacti突然不显示流量
查看>>
发现一个好工具记录一下,U盘启动ISO文件。
查看>>
centos7下配置网卡以及查询网卡UUID
查看>>
适用于旧计算机的10款最佳轻量级Linux发行版
查看>>
在VMware Workstation中批量创建上千台虚拟机
查看>>
linux常用软件收集
查看>>
linux查看桌面环境
查看>>
centos8安装ntfs-3g后,不能自动挂载U盘(NTFS格式)
查看>>
Linux安装显卡驱动
查看>>
使用minicom
查看>>
linux常用外设-打印机指纹和蓝牙的安装管理
查看>>
记录一下安装在移动硬盘上的fedora linux v33在各种笔记本下的兼容性
查看>>
关于安装系统后不能启动的问题!
查看>>
U盘的挂载过程-先记录一下
查看>>
python程序启动过程报错的排错一般步骤
查看>>