1. 程式人生 > >Leetcode篇:羅馬數字轉整數

Leetcode篇:羅馬數字轉整數

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篇:羅馬數字轉整數