LeetCode 13ローマデジタル変換Python 3

2390 ワード

ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています.文字値I 1 V 5 X 10 L 50 C 100 D 500 M 1000は、例えば、ローマ数字2をIIと書くと、2つの並列の1となる.12はXIIと書きます.つまりX+IIです.27 XXVIIと書くと、XX+V+IIとなります.通常、ローマ数字の中で小さい数字は大きな数字の右側にあります.しかし、例えば4はIIIではなくIVと書くという特例もある.数字1は数字5の左側にあり、表す数は大数5から小数1を減らした数値4に等しい.同様に、数字9はIXとして表される.この特殊なルールは、次の6つの場合にのみ適用されます.
IはV(5)とX(10)の左側に置いて4と9を表すことができる.XはL(50)とC(100)の左側に置いて40と90を表すことができる.CはD(500)とM(1000)の左側に置いて400と900を表すことができる.ローマ数字を指定し、整数に変換します.入力は1~3999の範囲であることを確認します.
例1:入力:III出力:3例2:
入力:IV出力:4例3:
入力:IX出力:9例4:
入力:「LVIII」出力:58解釈:C=100,L=50,XXX=30,III=3.例5:
入力:「MCMXCIV」出力:1994解釈:M=1000,CM=900,XC=90,IV=4.
4=IV=-I+V=-1+5とすることができるので,配列中のa[i+1]>a[i]の場合のa[i]を逆順に加えればよい.注目すべきは,比較的大きい時間はi+1が配列範囲内にあるため,計算合時に最下位を少なくした.sumを計算するときはa[-1]を加えて最後のビットにします.コードは次のとおりです.
class Solution:
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        num_list = []
        num = 0
        dit = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
        for i in range(len(s)-1):
            if dit[s[i]] < dit[s[i + 1]]:
                num = - dit[s[i]]
                num_list.append(int(num))
            else:
                num_list.append(int(dit[s[i]]))
        return sum(num_list) + dit[s[-1]]