力扣刷题,今天做这题,一开始就想到了使用字典来存储罗马数字,但是想不到怎么解决小的在左减,小的在右加,后面只好借助题解,看完题解顿时灵光乍现,但是题解里面有个num+dicts[s[i]]-2*last的一开始想不明白,后面画表就明白了。
题目
罗马数字包含以下七种字符:
I
,V
,X
,L
,C
,D
和M
。例如, 罗马数字
2
写做II
,即为两个并列的 1 。12
写做XII
,即为X
+II
。27
写做XXVII
, 即为XX
+V
+II
。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 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:
输入: s = "III"
输出: 3
示例2:
输入: s = "IV"
输出: 4
示例 3:
输入: s = "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.
思路
先把罗马数字转整数的七种方式,使用字典存储,用循环比较,比前一个小的就加,比前一个大的就减去,为什么是num+dicts[s[i]]-2*last,画图来比对。
解题方法
使用字典存储服务器托管网罗马数字转整数的方式,然后使用循环遍历比较,如IVX,X要依次减去IV,
num+dicts[s[i]]-2*last
10-5-1=4,因为无法直接拿到1,减多一个5加多一个4,就得到1了,
10-5+(-5+4)=4。
代码,直接可以在力扣运行,在编译器上需要进行修改
class Solution:
def romanToInt(self, s: str) -> int:
dicts = {
'I':1,
'V':5,
'X':10,
'L':50,
'C':100,
'D':500,
"M":1000
}
num = 0
last = 0
for i in range(len(s)):
if dicts[s[i]]
运行结果
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net