將一個羅馬數字轉化為阿拉伯數字,范圍在1-3999。下面是羅馬數字的介紹及基本規則:
羅馬數字采用七個羅馬字母作數字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。記數的方法:
相同的數字連寫,所表示的數等於這些數字相加得到的數,如 Ⅲ=3 小的數字在大的數字的右邊,所表示的數等於這些數字相加得到的數,如 Ⅷ=8、Ⅻ=12 小的數字(限於 Ⅰ、X 和 C)在大的數字的左邊,所表示的數等於大數減小數得到的數,如 Ⅳ=4、Ⅸ=9注意點:
輸入的羅馬數字是符合規范的,不需要考慮錯誤情況例子:
輸入: s=”XCIX”
輸出: 99
根據羅馬數字的規則,只有在前面的字母比當前字母小的情況下要執行減法,其他情況只需要把羅馬字母對應的數字直接相加即可。如果發現前一個字母比當前字母小,就減去前一個字母,因為錯誤的把它加入了結果,且在加上當前字母時還要減去前一個字母的值。
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
map = {"M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1}
result = 0
for i in range(len(s)):
if i > 0 and map[s[i]] > map[s[i - 1]]:
result -= map[s[i - 1]]
result += map[s[i]] - map[s[i - 1]]
else:
result += map[s[i]]
return result
# Test cases
if __name__ == "__main__":
assert Solution().romanToInt("XII") == 12
assert Solution().romanToInt("XXI") == 21
assert Solution().romanToInt("XCIX") == 99