思路:通常情況下將羅馬數(shù)字和整數(shù)相對(duì)應(yīng)存到字典乱凿,然后遍歷就可以解決⊙氏遥考慮到6種特殊情況徒蟆,I、X型型、C可放置左右段审,那么設(shè)置判斷條件,比較相鄰羅馬數(shù)字大小即可解決闹蒜。
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]]: #若前面小寺枉,則減該數(shù)
result -= d[s[i]]
elif d[s[i]] >= d[s[i + 1]]:
result += d[s[i]]
result += d[s[-1]]
return result
提交后看到的最優(yōu)解法:
思路:6中特殊情況下,比如IV和VI的結(jié)果分別是4和6绷落,結(jié)果相差2姥闪,也是I的兩倍。同理嘱函,I甘畅、X、C在分別在左和在右的結(jié)果差都是該羅馬數(shù)字的兩倍往弓。
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)