Leetcode13. 罗马数字转整数
问题描述
自己的解题方法:
- 将罗马字母‘I’,‘V’,‘X’,‘L’,‘C’,‘D’,‘M’及其所代表的数字,分别放入两个List中,记作A,B,sum=0
- 如果S[i]在A中的索引小于S[i+1]在A中索引,sum加两者之差;
- 如果S[i]==S[i+1]==S[i+2] 或 S[i]==S[i+1],sum加上这些项的和;
- 否则 sum+S[i]
代码如下:
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
sum=0
A=['I','V','X','L','C','D','M']
B=[1,5,10,50,100,500,1000]
i=0
while(i<len(s)):
if i+1>=len(s):
sum = sum + B[A.index(s[i])]
i += 1
elif A.index(s[i])<A.index(s[i+1]) :
sum=sum+(B[A.index(s[i+1])]-B[A.index(s[i])])
i+=2
elif s[i]==s[i+1]:
sum=sum+(B[A.index(s[i+1])]+B[A.index(s[i])])
i+=2
elif s[i]==s[i+1]==s[i+2]:
sum=sum+(B[A.index(s[i+2])]+B[A.index(s[i+1])]+B[A.index(s[i])])
i+=3
else:
sum = sum + B[A.index(s[i])]
i += 1
return sum
提交结果如下:
参考其他方法,使用python的dict,记作M,检索速度会提升。
- 如果只有一个罗马字母就直接返回该罗马字母value
- 遍历罗马字符串S,如果M[S[i+1]]>M[S[i]],取二者之差,否则取二者之和
代码如下:
def romanToInt(self, s):
M={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
rus=0
if s in M:
return M[s]
else:
for item in range(0,len(s)-1):
if M[s[item]]<M[s[item+1]]:
rus-=M[s[item]]
else:
rus+=M[s[item]]
rus+=M[s[-1]]
return rus
结果如下: