Leetcode篇:羅馬數字轉整數
阿新 • • 發佈:2018-09-19
pre lee pycharm 兩個 man self. pri print 判斷
@author: ZZQ
@software: PyCharm
@file: Luoma2Int.py
@time: 2018/9/16 17:06
要求: 羅馬數字轉數字
字符 數值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
羅馬數字 2 寫做 II ,即為兩個並列的 1。12 寫做 XII ,即為 X + II 。
27 寫做 XXVII, 即為 XX + V + II 。
通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,
例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。
同樣地,數字 9 表示為 IX。這個特殊的規則只適用於以下六種情況:
1) I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
2) X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
3) C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
思路: 每次先將當前羅馬數字表示的數值加上,然後判斷後面跟的是不是六種特殊情況之一,如果是,則減去二倍的當前羅馬數字表示的數值。
class Solution(): def __init__(self): pass def str2int(self, n): if n == ‘I‘: return 1 if n == ‘V‘: return 5 if n == ‘X‘: return 10 if n == ‘L‘: return 50 if n == ‘C‘: return 100 if n == ‘D‘: return 500 if n == ‘M‘: return 1000 def romanToInt(self, s): """ :type s: str :rtype: int """ roman_len = len(s) value = 0 currstr = ‘‘ for i in range(0, roman_len): value += self.str2int(s[i]) if currstr == ‘I‘ and s[i] == ‘V‘: value += - 2 * self.str2int(currstr) if currstr == ‘I‘ and s[i] == ‘X‘: value += - 2 * self.str2int(currstr) if currstr == ‘X‘ and s[i] == ‘L‘: value += - 2 * self.str2int(currstr) if currstr == ‘X‘ and s[i] == ‘C‘: value += - 2 * self.str2int(currstr) if currstr == ‘C‘ and s[i] == ‘D‘: value += - 2 * self.str2int(currstr) if currstr == ‘C‘ and s[i] == ‘M‘: value += - 2 * self.str2int(currstr) currstr = s[i] return value if __name__ == "__main__": x = "IX" answer = Solution() print answer.romanToInt(x)
Leetcode篇:羅馬數字轉整數