LeetCode面试系列 第7天:No.13 - 罗马数字转整数

简介: LeetCode面试系列 第7天:No.13 - 罗马数字转整数

今天要给大家分析的面试题是 LeetCode 上第 13 号问题,

LeetCode - 13. 罗马数字转整数

https://leetcode-cn.com/problems/palindrome-number/


题目描述


罗马数字包含以下七种字符: IVXLCDM


字符          数值I             1V             5X             10L             50C             100D             500M             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。


给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。


示例 1:


输入: "III"输出: 3


示例 2:


输入: "IV"输出: 4


示例 3:


输入: "IX"输出: 9


示例 4:


输入: "LVIII"输出: 58解释: L = 50, V= 5, III = 3.


示例 5:


输入: "MCMXCIV"输出: 1994解释: M = 1000, CM = 900, XC = 90, IV = 4.


  • 题目难度:简单
  • 通过次数:108.7K
  • 提交次数:183K
  • 贡献者:LeetCode
  • 相关标签
  • 相似题目

解题思路:


只要考虑以下两种情况:


  • 使用字典存储每个罗马字母表示的数,比如,'V' - 5, 'X' - 10


  • 如果当前位的字母是最后一位,或者它后一位字母对应的数比它对应的数小的话,则加上当前位的字母对应的数


  • 其他情况则减去当前位的字母对应的数.

AC的代码为:


class Solution:    def romanToInt(self, s: str) -> int:        d = dict()        d = {            'I': 1,            'V': 5,            'X': 10,            'L': 50,            'C': 100,            'D': 500,            'M': 1000        }
        sum0 = 0        for i in range(len(s)):            currentValue = d[s[i]]
            if i == len(s) -1 or d[s[i+1]] <= currentValue:  # d[s[i+1]]: nextValue                sum0 += d[s[i]]            else:                sum0 -= d[s[i]]
        return sum0


示例代码:

https://github.com/JustDoPython/leetcode-python/tree/master/leetcode-013


LeetCode面试系列:


第1天:Leetcode 89 - 格雷码

第2天:No.136 - 只出现一次的数

第3天:No.67 - 二进制数求和

第4天:No.202 - 快乐数

第5天:No.204 - 统计质数

第6天:No.9 - 回文数

目录
相关文章
|
3月前
|
存储
LeetCode整数反转
解决LeetCode上的整数反转问题的几种方法,包括错误的方法和优化后的解决方案,以及如何避免反转后的整数超出32位有符号整数范围的问题。
48 1
|
3月前
【LeetCode】整数翻转
【LeetCode】整数翻转
23 1
|
3月前
|
存储 C++
Leetcode第十二题(整数转罗马数字)
LeetCode第12题“整数转罗马数字”的解题方法,包括罗马数字的基本规则和特殊规则,以及如何使用C++实现整数到罗马数字的转换。
27 0
|
3月前
|
C++
Leetcode第十三题(罗马数字转整数)
这篇文章介绍了LeetCode第13题“罗马数字转整数”的解题方法,通过一个C++的类`Solution`中的`romanToInt`函数来实现,该函数使用哈希表和遍历字符串的方法,根据罗马数字的规则将输入的罗马数字字符串转换为对应的整数值。
64 0
|
3月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
26 0
|
5月前
|
开发者 索引 Python
这些年背过的面试题——LeetCode
本文是技术人面试系列LeetCode篇,一文带你详细了解,欢迎收藏!
|
5月前
|
搜索推荐 索引 Python
【面试题】缺失的第一个整数
【面试题】缺失的第一个整数
49 0
|
5月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
2月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
2月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?