leetcode(python) 13.罗马数字转整数
2019-03-09 本文已影响0人
梦vctor
思路:通常情况下将罗马数字和整数相对应存到字典,然后遍历就可以解决。考虑到6种特殊情况,I、X、C可放置左右,那么设置判断条件,比较相邻罗马数字大小即可解决。
class Solution:
def romanToInt(self, s: str) -> int:
r = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
value = [1, 5, 10, 50, 100, 500, 1000]
d = dict(zip(r, value)) #zip()打包为元组的列表
print(d)
result = 0
for i in range(len(s)-1):
if d[s[i]] < d[s[i + 1]]: #若前面小,则减该数
result -= d[s[i]]
elif d[s[i]] >= d[s[i + 1]]:
result += d[s[i]]
result += d[s[-1]]
return result
提交后看到的最优解法:
思路:6中特殊情况下,比如IV和VI的结果分别是4和6,结果相差2,也是I的两倍。同理,I、X、C在分别在左和在右的结果差都是该罗马数字的两倍。
dic1 = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
if not s:
return (0)
num = dic1[s[0]]
previous = dic1[s[0]]
for i in s[1:]:
current = dic1[i]
num += current
if current > previous:
num = num - 2 * previous
previous = current
return (num)