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】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
|
3天前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
11 1
|
3天前
|
算法
【刷题】 leetcode 面试题 08.05.递归乘法
递归算法是一种在计算机科学和数学中广泛应用的解决问题的方法,其基本思想是利用问题的自我相似性,即将一个大问题分解为一个或多个相同或相似的小问题来解决。递归算法的核心在于函数(或过程)能够直接或间接地调用自身来求解问题的不同部分,直到达到基本情况(也称为基础案例或终止条件),这时可以直接得出答案而不必再进行递归调用。
25 4
【刷题】 leetcode 面试题 08.05.递归乘法
|
3天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
25 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
3天前
leetcode代码记录(整数拆分
leetcode代码记录(整数拆分
12 0
|
3天前
[leetcode~数位动态规划] 2719. 统计整数数目 hard
[leetcode~数位动态规划] 2719. 统计整数数目 hard
|
3天前
|
存储 算法
leetcode1237. 找出给定方程的正整数解
leetcode1237. 找出给定方程的正整数解
8 0
|
3天前
|
C++ 索引
【力扣经典面试题】14. 最长公共前缀
【力扣经典面试题】14. 最长公共前缀
|
3天前
|
C++
【力扣经典面试题】58. 最后一个单词的长度
【力扣经典面试题】58. 最后一个单词的长度
|
3天前
|
算法 Java
【力扣经典面试题】12. 整数转罗马数字
【力扣经典面试题】12. 整数转罗马数字