1 题目描述

2 解题思路

2.1 模拟

通常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。

例如XXVII 可视作 X+X+V+I+I=10+10+5+1+1=27。

若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。

例如XIV 可视作X−I+V=10−1+5=14。

那么我们就从字符串的串头开始遍历,同时我们比较除最后一位以外的其他位与后一位之间的大小。如果当前位罗马数字对应的数字比后一位的小,那么总的数字结果就减去这一位,否则加上这一位。

class Solution:SYMBOL_VALUES = {'I': 1,'V': 5,'X': 10,'L': 50,'C': 100,'D': 500,'M': 1000,}
#每个罗马数字对应的数字def romanToInt(self, s: str) -> int:ans = 0n = len(s)for i, ch in enumerate(s):value = Solution.SYMBOL_VALUES[ch]if i < n - 1 and value < Solution.SYMBOL_VALUES[s[i + 1]]:
#如果当前位比后一位小,那么说明这一位要减掉ans -= valueelse:ans += valuereturn ans

2.2 两位两位比较

大致的思路就是,先把所有可能的值都存入一个字典里面

两位罗马数字对应的数字,我们赋值为:两位罗马数字应该的值-两位罗马数字第一位的值

然后我们就累加就可以了

dict.get(a,b):如果找得到a的话,返回a的键值,否则,返回b

这里我们每次都是检索当前位置和他前面一个位置两个元素,拼接起来看在不在字典里面,在的话累加,不在的话,就加上这个位置罗马数字所对应的值。

比如XIV,检索X的时候,返回10;检索XI的时候,因为找不到XI这个两位罗马数字,返回I的值,1,在检索IV的时候,有这个键值对,所以返回IV的3——加上之前I的1,IV的4就计算出来了

class Solution:def romanToInt(self, s: str) -> int:dic={'I':1,'IV':3,'V':5,'IX':8,'X':10,'XL':30,'L':50,'XC':80,'C':100,'CD':300,'D':500,'CM':800,'M':1000}
#所有合法的一位&两位罗马数字number=0;for i,n in enumerate(s):number=number+dic.get(s[max(i-1,0):i+1],dic[n])
#如果两位罗马数字存在,那么就返回两位罗马数字(当前位&前一位)对应的数字
#否则,返回当前位罗马数字对应的数字return(number)

文巾解题 13. 罗马数字转整数相关推荐

  1. 文巾解题 8. 字符串转换整数 (atoi)

    1 题目描述 2 解题思路 2.1 笨办法 class Solution:def myAtoi(self, s: str) -> int:s=s.strip()#去掉前面的空格if(s=='') ...

  2. 文巾解题 342. 4的幂

    1 题目描述 2 解题思路 2.1 方法1 判断log函数的结果是不是整数 class Solution:def isPowerOfFour(self, n: int) -> bool:if(n ...

  3. java输出罗马数字,【Java】【刷穿 LeetCode】13. 罗马数字转整数(简单)

    首页 专栏 java 文章详情 0 [刷穿 LeetCode]13. 罗马数字转整数(简单) 宫水三叶发布于 今天 14:14 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 ...

  4. Leetcode 13.罗马数字转整数

    Leetcode 13.罗马数字转整数 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 100 ...

  5. LeetCode(13.罗马数字转整数) JAVA Hashmap

    LeetCode(13.罗马数字转整数) JAVA Hashmap 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D ...

  6. 文巾解题 面试题 01.04. 回文排列

    1 题目描述 2 解题思路 2.1 哈希表 创建一个哈希表,记录每个元素出现的次数.如果出现次数为奇数的元素只有一个或者没有,那么就是一个回文排列 class Solution:def canPerm ...

  7. 文巾解题 15. 三数之和

    1 题目描述 2 解题思路 2.1 使用两数之和函数 这种做法目前超时了,如果大家有想到合适的减时间/剪枝的方法,欢迎私信or评论~ 两数之和的方法见文巾解题 1. 两数之和_刘文巾的博客-CSDN博 ...

  8. 文巾解题 477. 汉明距离总和

    1 题目描述 2 解题思路 2.1 暴力两两比较 两个数字之间的汉明距离可以使用 文巾解题 461. 汉明距离_刘文巾的博客-CSDN博客 中的任何一种方法,但是因为这个是两两比较,时间复杂度比较高, ...

  9. 文巾解题 1035. 不相交的线

    1 题目描述 2 解题思路 k条互不相交的直线分别连接了数组 nums1和nums2的 k 对相等的元素,而且这 k 对相等的元素在两个数组中的相对顺序是一致的,因此,这 k 对相等的元素组成的序列即 ...

最新文章

  1. 程序的编译、链接和执行
  2. AI也用思维导图:教它像人类一样高效规划
  3. 如何成为一名入门级 iOS 开发者
  4. 网易云基于Prometheus的微服务监控实践
  5. 支持ps2021 Document Star证件照大师 Mac插件2.0
  6. android开源2016_2016年十大开源项目
  7. linux 驱动基础知识(2)---设备树
  8. [C# 3.0 入门] [第一章 Lambda表达式] 第三节:Lambda与匿名方法的区别(日文翻译)...
  9. React学习笔记三 脚手架生成的index.js内容简介
  10. 利用IDLE对 dem进行批量拼接处理
  11. 一款开源的 macOS 外接显示器必备工具
  12. 软件开发介绍-尚硅谷视频学习随记
  13. matlab latex 中文字体,LaTeX - 设置中文字体
  14. 新浪和腾讯微博开放平台比较
  15. Scratch(三十五):FlyBird
  16. python里的def方法中->代表什么意思
  17. 2021-2027全球与中国Al2O3氧化铝陶瓷基板白板市场现状及未来发展趋势
  18. ATmega16 单片机 AVR单片机 自动计价电子秤
  19. 一文了解BIOS相关名词
  20. 星界边境Starbound创意工坊订阅的mod的存放路径

热门文章

  1. iptables白名单配置
  2. MyEclipse和tomcat结合编写jsp对于中文乱码的解决方法
  3. 开始认真学习Android了
  4. Windows平板电脑将取代苹果在企业市场地位
  5. 802.11帧聚合技术
  6. 2020年高等数学方法与提高(上海理工大学)学习笔记:向量代数与空间解析几何
  7. leetcode 279. 完全平方数 bfs广度优先解法 图解 动态规划解法 c代码
  8. linux mysql 5.6.22_linux下MySQL5.6.2安装过程
  9. 启动服务错误5拒绝访问_【Go API 开发实战 5】基础1:启动一个最简单的 RESTful API 服务器...
  10. jpa mysql乐观锁_JPA @Lock(value = LockModeType.PESSIMISTIC_WRITE) 悲观锁防坑