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

pytnon学习笔记--解决力扣简单题罗马数字转整数

一.题目描述
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。

二.解题思路
先用一个字典或者元组把所有的数据存起来,用于后续的遍历查找,然后进入循环从头遍历这个字符串,从字典中获取对应的整数值并且定义一个变量初始化0用来存取最后的结果,接着对于特殊情况的判定,如果当前字符不是最后一个字符并且它的值小于下一个值,说明整个字符串是特殊字符串,结果变量就减去当前的值,反之则相加。例如IV这个是4,先检查I,它不是最后一个字符,并且第一个字符的值是1小于下一个字符V的值5,所以结果变量减去当前I的值1,就变成-1,然后判断下一个字符V,它是最后一个字符,所以结果变量加上当前的值,结果变量就是-1+5,最后转换的结果就是4。实现代码如下:

class Solution(object):def romanToInt(self, s):roman_map = {'I': 1,'V': 5,'X': 10,'L': 50,'C': 100,'D': 500,'M': 1000}result = 0for i in range(len(s)):value = roman_map[s[i]]if i < len(s) - 1 and value < roman_map[s[i + 1]]:result -= valueelse:result += valuereturn result

三.优化版本
虽然刚刚的版本依然可以解题,但是每一次都需要遍历两次字典,所以我就在定义一个变量用来存放遍历的前一个字符的值,同时我把字符串逆转过来,从右往左开始遍历而不是从左往右,这样就可以减少遍历的时间同时加快速度。核心部分没有改变,只不过是判断第二个字符的值是否比前一个字符要小,如果是,就减去当前的值,反之则相加。实现代码如下:

class Solution(object):def romanToInt(self, s):roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50,'C': 100, 'D': 500, 'M': 1000}result = 0prev_value = 0  # 记录前一个字符的值# 从右向左遍历for char in reversed(s):value = roman_map[char]if value < prev_value:result -= value  # 当前值小于右边的值,减去else:result += value  # 否则加上prev_value = valuereturn result

四.总结
这道力扣的基础题可以帮助我学习如何运用字典,如何逆转字符串,并且要仔细考虑字符串和整数转换之间的规律。总而言之,我先从这些简单题基础题开始练习,一步一步掌握好一门语言。

http://www.jsqmd.com/news/672261/

相关文章:

  • 设计系统已死?AI时代的两种终极范式对决:Awesome DESIGN.md vs UI UX Pro Max
  • 【Dify权限管控终极清单】:2024新版v0.12.0中已废弃的3个危险API + 必须迁移的5个替代方案
  • 基于TMS320F28335的开关电源模块并联供电系统设计与实现
  • C# 14原生AOT部署Dify客户端(企业级灰度发布全链路实录)
  • 高性能FLV直播录制文件修复架构深度解析:BililiveRecorder工具箱实现原理
  • 让我们从hello world开始-认证实现
  • 如何免费生成专业条码:Libre Barcode开源字体终极指南
  • NineData亮相香港国际创科展InnoEX 2026,以AI加速布局全球市场
  • 从UML到SysML:给软件工程师的系统思维升级指南(含实战案例拆解)
  • 使用Python版LangChain调用外部函数实战:实现智能天气查询
  • intv_ai_mk11惊艳案例:用‘分点说明’指令生成直播复盘报告,覆盖数据/话术/节奏
  • D3KeyHelper:暗黑3玩家的智能操作助手,让技能循环自动化
  • 【STILT工具】ICOS 综合碳观测系统提供的 STILT Footprint 在线分析系统
  • 蓝桥杯CT107D开发板实战:用PCF8591芯片和光敏电阻DIY一个简易光照计
  • 【广西大学主办 | ACM出版(ISBN号: 979-8-4007-2349-0),往届已于会后3个月见刊,见刊后1个月检索 | 设评优评奖】第六届物联网与机器学习国际会议 (IoTML 2026)
  • 如何在5分钟内掌握PPTist:免费开源在线PPT制作工具的终极指南
  • 别只盯着IDE!RAD Studio 11升级前,先搞定你的数据库和部署环境(InterBase实战)
  • 深度解锁xrdp:构建企业级Linux远程桌面解决方案的实战指南
  • 2026玻璃门深度选型指南:如何匹配最佳玻璃解决方案? - 速递信息
  • Loom虚拟线程响应式项目上线前必检11项配置(含GC调优、Reactor资源泄漏防护、TraceID透传配置)
  • 从公式到仿真:DFIG风机MPPT控制的建模与实现
  • OpenClaw人人养虾:音频与语音
  • 93、快速筛选数据
  • JavaQuestPlayer:终极QSP游戏引擎与开发平台完整指南
  • NaViL-9B部署详解:双24GB显卡PCIe带宽优化与NVLink配置建议
  • Mobilerun架构深度解析:基于LLM的多Agent移动设备自动化框架设计
  • 5分钟快速部署:打造你的专属AI中医助手——仲景中医大语言模型实战指南
  • LangGraph CLI实战:5分钟搞定Python 3.11环境下的本地服务器部署(含常见错误排查)
  • 防脱洗发水怎么选?为什么劝你把“乌诺地尔”加入成分清单 - 速递信息
  • Dify金融合规配置实战指南:从零搭建符合银保监2024新规的AI应用流水线