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. Windows和Linux系统下,虚拟环境安装的全面说明和详细步骤
  2. win docker运行nginx
  3. SAP Spartacus的site context配置参数SiteContextParamsService
  4. 信息学奥赛一本通 1319:【例6.1】排队接水 | 洛谷 P1223 排队接水
  5. RabbitMq(十二) 借用死信交换机实现延迟队列
  6. rad linux下安装mysql_Rad Hat Enterprise Linux 5.5上安装Oracle 11g R2
  7. 体验VisualStudio 2013中的内存分析功能
  8. VC++动态链接库(DLL)编程深入浅出:QA(原创)
  9. 64java下载_java软件下载|java64 v8.0 官方版-520下载站
  10. 多种modelsim版本下载地址
  11. 智能陈桥五笔输入法 for linux,陈桥五笔输入法官方下载
  12. okhttp请求使用cookie
  13. Linux 查看自己的IP地址
  14. android 粘性控件,RecyclerView 粘性标签库: 可结合 BRVAH 使用
  15. C++STL之<set>和<map>
  16. python第六章答案_python第六章
  17. 【SIGN】函数使用技巧
  18. 微信公众平台可以修改微信号了,微信号怎么设置好。
  19. shell 编程的老臣 - sed
  20. 计算机视觉之环境探索

热门文章

  1. 【node测试系列】几款前端测试断言库(Assertions lib)的选型总结
  2. 论文笔记之:Instance-aware Semantic Segmentation via Multi-task Network Cascades
  3. VS2008资源问题解决方法
  4. iOS 7 Searchbar右侧空白
  5. Git和Repo管理使用简要介绍
  6. W600 PWM 捕获功能使用示例程序
  7. Leetcode1688. 比赛中的配对次数[C++题解]:简单题模拟
  8. 燕赵志愿云如何认证_如何成为中国志愿服务网注册志愿者?操作秘籍!
  9. python向数据库写入数据_如何用Python向Mysql中插入数据
  10. 你所接触的计算机网络,学计算机网络的进