当前位置: 首页 > news >正文

备战蓝桥杯Day29 - 拼接最大数字问题

问题描述

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

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

问题思路

1.比较两个字符串的第一个数字,数值大的在前面,数值小的在后面

2.当两个字符串长度差不多且其中一个是另一个的字串时,从第一个数字开始比较两个字符串的方法就不太可行了。

3.更好的解决办法是:比较两个字符串结合在一起后的字符串的大小,比如:“128” + ”1286“ < "1286" + "128",通过比较字符串拼接后的数值大小,我们的算法也更容易实现。

代码实现

比较大小是调用python自带的包,也可以自己写冒泡排序来进行排序。

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 -1else:return 0def num_join(li):  # 定义拼接函数li = list(map(str, li))  # 通过map函数将列表中的数字都转换成字符串格式li.sort(key=cmp_to_key(xy_cmp))return "".join(li)print(num_join(li))

家人们咱们就是说直接用冒泡排序排好序后连接字符串就可以了,上面这个函数不常用也不太好理解,直接冒泡排序实现超级简单!

li = [94, 65, 73, 128, 1286, 4]li = list(map(str, li))   # 将列表中的数字转为字符串类型的for i in range(len(li) - 1):  # 一整个就是冒泡排序的思想for j in range(len(li) - 1 - i):if li[j]+li[j+1] < li[j+1]+li[j]:  # 唯一不同是不是比较两个数字的大小# 而是比较两个数链接在一起后数值的大小li[j], li[j+1] = li[j+1], li[j]print("".join(li))  # 最后将列表中的字符都拼接起来

一步一步的大踏步向前吧!

http://www.lryc.cn/news/323328.html

相关文章:

  • 基于springboot的mysql实现读写分离
  • Python爬虫之Scrapy框架系列(24)——分布式爬虫scrapy_redis完整实战【XXTop250完整爬取】
  • 提升效率,稳定可靠:亚信安慧AntDB的企业价值
  • 洛谷入门——P1567 统计天数
  • C++概述
  • Linux学习笔记16 - 系统命令
  • 读书笔记--阅读华为数据治理之旅有感
  • 网络安全协议基本问题
  • 面试(一)
  • libVLC windows开发环境搭建
  • 【Netty】Netty的使用和常用组件详解
  • Legacy|电脑Windows系统如何迁移到新安装的硬盘?系统迁移详细教程!
  • Windows 11 安装 Scoop
  • 新能源汽车小三电系统
  • 面试问答示范
  • 嵌入式3-22
  • JAVA Synchronized对象锁和类锁区别(牛逼)
  • 力扣算法题之好数对的数目
  • C++ vector 删除
  • ASP.NET-WebFoms常见前后端交互方式
  • LWC 学习资源
  • Debezium日常分享系列之:Debezium2.5稳定版本之数据类型映射
  • 通过JWT完成token登录验证
  • 【漏洞复现】福建科立迅通信指挥调度平台down_file.php sql注入漏洞
  • 软考79-上午题-【面向对象技术3-设计模式】-结构型设计模式02
  • 前端面试拼图-知识广度
  • Android 开发 地图 polygon 显示信息
  • flink1.18.0报错 an implicit exists from scala.Int => java.lang.Integer, but
  • 掌握C语言结构体,开启编程新世界
  • YOLOv3学习