【LeetCode】12,整数转罗马数字。 难度等级:中等。易错点:使用 python 字典构建哈希表时要考虑哈希表是否有序

news2024/11/26 21:31:31

文章目录

    • 一、题目
    • 二、我的解法:基于有序哈希表的贪心算法
      • 2.1 使用 dict 构建哈希表
      • 2.2 使用两个 list / tuple 构建有序哈希表

一、题目

在这里插入图片描述
在这里插入图片描述

二、我的解法:基于有序哈希表的贪心算法

2.1 使用 dict 构建哈希表

贪心法则:我们每次尽量使用最大的数来表示。 比如对于 1994 这个数,如果我们每次尽量用最大的数来表示,依次选 1000,900,90,4,会得到正确结果MCMXCIV。

所以,我们将哈希表按照从大到小的顺序排列,然后遍历哈希表,直到表示完整个输入。

其实整数转罗马数字的问题可以看做一个 “十进制数转不定进制数” 的问题

code:

class Solution:
    def intToRoman(self, num: int) -> str:
        s = ""
        hashmap = {1000: 'M',
                   900: 'CM',
                   500: 'D',
                   400: 'CD',
                   100: 'C',
                   90: 'XC',
                   50: 'L',
                   40: 'XL',
                   10: 'X',
                   9: 'IX',
                   5: 'V',
                   4: 'IV',
                   1: 'I',
                   }
        for key in hashmap:
            if num // key > 0:
            	# num//key 必须加括号,否则先计算 hashmap[key]*num 是 str 类型,str//int 会报错
                s += hashmap[key] * (num // key)
                num = num % key
        return s

这里有一个关键的问题是 for 循环必须按照 1000,900,500… 这样从大到小的顺序进行遍历。而 python 中的字典不一定能保证有序,只有从 py3.7 开始,dict 才是默认有序的,所以使用字典构建有序哈希表容易出错。

为了保证哈希表的有序性,可以使用两个 list / tuple 构建有序哈希表。

此外,判断语句 if num // key > 0 也可以改为 if num >= key

2.2 使用两个 list / tuple 构建有序哈希表

使用两个 list / tuple 构建的哈希表可以确保有序:

class Solution:
    def intToRoman(self, num: int) -> str:
        RomanNum = ('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I')
        IntNum = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1)
        length = len(RomanNum)

        s = ''
        for i in range(length):
            if num >= IntNum[i]:
                s += RomanNum[i] * (num // IntNum[i])
                num = num % IntNum[i]
        return s

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/598471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于AT89C52单片机的多功能万年历设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87853675 源码获取 目 录 摘 要 1 1 方案论证 2 1.1 单片机芯片的选择方案和论证 2 1.2 显示模块选择方案和论证 2 1.3 时钟芯片的选择方案和论证 3 1.4 电路设计…

BitLocker加密卷“恢复密钥(数字密码)”提取还原

BitLocker是微软Windows自带的用于加密磁盘分卷的技术。 通常,解开后的加密卷通过Windows自带的命令工具“manage-bde”可以查看其恢复密钥串,如下图所示: 如图,这里的数字密码下面的一长串字符串即是下面要提取恢复密钥。 在计…

IMA/EVM完整性检测代码分析

IMA/EVM完整性检测 IMA(Integrity Measurement Architecture)是一个内核安全子系统,用于检测文件或数据的完整性和安全性。IMA的hook机制指的是内核接口钩子(kernel interface hooks),用于向IMA注册和实现…

第三章 部署Web及WDS服务

♥️作者介绍:奇妙的大歪 ♥️个人名言:但行前路,不负韶华! ♥️个人简介:云计算网络运维专业人员 目录 一.什么是web 1.www(world wide web)万维网 世界 维度 2.www服务软件 3.info…

ElementUI-Form表单二次封装

一、Form组件二次封装考虑组件构成: form组件:input text passworldselectcheckboxradio文本域日期 二、实现Form表单的二次封装: 1. 分析出对应的位置 开始抽离组件 2. 如果需要产生多个form表单,则需要产生多个el-form-item…

学习路之gis--百度离线地图下载制作

在有些情况下需要使用地图,但又不能访问外网,这时你需要一个离线地图。本文介绍如何制作百度离线地图。 下面将介绍如何实现一个离线版百度地图: 1. 下载百度地图瓦片 下载网址:望远网-百度地图下载 首先需选择下载地图瓦片的样式…

BUG: scheduling while atomic: fpv_cams/605/0x00010001

IIO框架下IMU驱动的接口在定时器中断内调用报错,因调用IO读定时间较长会导致睡眠的发生,因为内核总是崩。 尝试了几种解决方法: 1.在IIO框架里,使用 spidev 的接口来读写,错误依旧; 2.去掉IIO框架&#x…

香橙派One(全志H3芯片)编译烧写U-boot、Linux内核zImage、dtb

一、编译烧写u-boot 1.1 源码和工具下载: 香橙派提供了u-boot源码和交叉编译链工具: (1)u-boot(2020.04)下载地址:https://github.com/orangepi-xunlong/u-boot-orangepi (2&#…

MyBatis - MyBatis Generator

文章目录 1.什么是 MyBatis Generator2.使用 MyBatis Generator2.1 导入依赖2.2 application 配置2.3 添加 Java 配置2.4 MBG 配置2.5 生成代码2.6 基本 CRUD 操作 3.进阶使用 MyBatis Generator3.1 基于条件的 CRUD3.2 子查询、Group 与 Join 查询3.3 一对一查询、一对多查询 …

ANSYS Workbench中的网格优化方法

自 50 年代后期以来,有限元法 (FEM) 已被用作解决工程问题的强大工具。当时的计算是手工进行的,该方法是基于力的,而不是我们今天使用的基于位移的方法。由于计算机工业的进步,已经开发出各种有限元商业软件。Ansys 可以被认为是全…

Nginx网站部署

Nginx网站部署 一、访问状态统计配置二、基于授权的访问控制三、基于客户端的访问控制四、基于域名的 Nginx 虚拟主机五、基于IP 的 Nginx 虚拟主机六、基于端口的 Nginx 虚拟主机 一、访问状态统计配置 1.先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包…

常用抓包工具使用-wireshark使用(二)

常用抓包工具使用-wireshark使用(二) 文章目录 常用抓包工具使用-wireshark使用(二)前言一、wireshark安装1.1 windows安装1.2 mac安装 二、wireshark抓包和过滤2.1 打开Wireshark2.2 选择网络接口:2.3 wireshark抓包页…

【Nginx 网络服务】

目录 一、Nginx和Apache的优点和缺点二、编译安装Nginx服务1.关闭防火墙,将安装nginx所需软件包传到/opt目录下2.安装依赖包3.创建运行用户、组4.编译安装Nginx5.检查、启动、重启、停止 nqinx服务 三、认识Nginx服务的主配置文件 nginx.conf1、系统文件支持数量2&a…

商场内怎么导航?商场导航图怎么画?

商场内怎么导航?大型购物商场是目前一二线城市最常见的购物场所,占地面积较大,布局错综复杂,商品比较齐全,如果没有商场地图导航,会导致新顾客难以找到想要的商品,那么大型购物商场商场地图怎么…

索引特性.

目录 没有索引,可能会有什么问题认识磁盘MySQL与存储先来研究一下磁盘在看看磁盘中一个盘片扇区定位扇区结论磁盘随机访问(Random Access)与连续访问(Sequential Access) MySQL 与磁盘交互基本单位建立共识索引的理解建立测试表插入多条记录查看插入结果中断一下---…

打跑个人开源转角的“拦路虎”——我的开源之路

从参与Apache 开源项目,到凭借业务需求独自开发个人开源项目;从项目开源出来无人问津到至今500star,多个企业级用户,在开源过程中,我也从走过低谷,一度想过放弃,但仍然选择坚持至今日。 这一路…

Data Distillation: A Survey

本文是蒸馏学习综述系列的第二篇文章,Data Distillation: A Survey的一个翻译 数据蒸馏:综述 摘要1 引言2 数据蒸馏框架2.1 元模型匹配的数据蒸馏2.2 梯度匹配的数据蒸馏2.3 轨迹匹配的数据蒸馏2.4 分布匹配的数据蒸馏2.5 因式分解的数据蒸馏 3 数据模态…

深度探索:Qt CMake工程编译后的自动打包策略

深度探索:Qt CMake工程编译后的自动打包策略 1. 引言(Introduction)1.1 Qt和CMake的基本概念(Basic Concepts of Qt and CMake)1.2 自动打包的重要性(Importance of Automatic Packaging) 2. Qt…

ELK +Filebeat日志分析系统

一、 ELK日志分析系统概述 1、ELK简介 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少&#xff0c…

我是如何将家里的台式机改成服务器的

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 文章目录 前言准备工作电脑宽带公网ip光猫给成桥接方式设置路由器设置服务器静态ip地址前言 搞研发的伙伴们,都知道服务器是个什么东西,以及服务器的作用、费用,相信都一清二楚。一般,我们用服务器说的简单点就是放一…