Leetcode---ローマ数回転整数(Python 3実装)
1801 ワード
Leetcode-ローマ数回転整数
(半日かかったが、結局できなかった.心が疲れた~~~ネットユーザーの解題の考え方に頼るしかない)
ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています.
例えば、ローマ数字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.
ネットユーザーの2つの解法:
第1種
第2種
(半日かかったが、結局できなかった.心が疲れた~~~ネットユーザーの解題の考え方に頼るしかない)
ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています.
例えば、ローマ数字2はIIと書かれており、2つの並列の1である.12はXIIと書きます.つまりX+IIです.27 XXVIIと書くと、XX+V+IIとなります.
通常、ローマ数字の中で小さい数字は大きな数字の右側にあります.しかし、例えば4はIIIではなくIVと書くという特例もある.数字1は数字5の左側にあり、表す数は大数5から小数1を減らした数値4に等しい.同様に、数字9はIXとして表される.この特殊なルールは、次の6つの場合にのみ適用されます.
ローマ数字を指定し、整数に変換します.入力は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.
ネットユーザーの2つの解法:
第1種
1
2
3
4
5
6
7
8
9
10
def romanToInt(s):
a = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
ans = 0
for i in range(len(s)):
if i < len(s) - 1 and a[s[i]] < a[s[i + 1]]:
ans -= a[s[i]]
else:
ans += a[s[i]]
return ans
第2種
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution:
def romanToInt(self, s: str) -> int:
dic = {
"I":1,
"V":5,
"X":10,
"L":50,
"C":100,
"D":500,
"M":1000
}
ans = 0
for i, char in enumerate(s[:-1]):
if dic[char] >= dic[s[i+1]]:
ans += dic[char]
else:
ans -= dic[char]
ans += dic[s[-1]]
return ans