LeetCode_Python(13)_ローマ数字回転整数

1252 ワード

需要
ローマ数字には、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解釈:L=50,V=5,III=3
例5入力:「MCMXCIV」出力:1994解釈:M=1000、CM=900、XC=90、IV=4
解決策
  • ローマ数字と整数に基づいて辞書を構築し、対応関係を容易に取得する.
  • 需要に応じて、前のローマ数字に対応する整数値が、後のローマ数字に対応する整数値より小さい場合、前のローマ数字に対応する整数値は負の値であり、そうでなければ正の値である.
  • 参照コード
  • def roman_to_int(rm):
        roman_num = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
        r = roman_num[rm[-1]]
    
        for s in range(len(rm)-1):
            n = roman_num[rm[s]]
            r += n if n >= roman_num[rm[s+1]] else -n
    
        return r
    
    rm = 'DIV'
    print(roman_to_int(rm))
    504