題目傳送門:https://leetcode.com/problems/roman-to-integer/
Римские цифры представлены семью различными символами: I
, V
, X
, L
, C
, D
и M
.
Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000
Например, два записывается как II
римскими цифрами, просто две единицы складываются вместе. Двенадцать записывается как XII
, то есть просто X
+ II
. Число двадцать семь записывается как XXVII
, то есть XX
+ V
+ II
.
Римские цифры обычно пишутся слева направо от большего к меньшему. Однако цифра четыре не IIII
. Вместо этого число четыре записывается как IV
. Так как единица предшествует пятерке, мы вычитаем ее и получаем четыре. Тот же принцип применим к числу девять, которое записывается как IX
. Есть шесть случаев, когда используется вычитание:
I
можно поставить передV
(5) иX
(10), чтобы получилось 4 и 9.X
можно поставить передL
(50) иC
(100), чтобы получилось 40 и 90.C
можно поставить передD
(500) иM
(1000), чтобы получить 400 и 900.
Дана римская цифра, преобразовать ее в целое число. Ввод гарантированно находится в диапазоне от 1 до 3999.
Пример 1:
Input: "III" Output: 3
Пример 2:
Input: "IV" Output: 4
Пример 3:
Input: "IX" Output: 9
Пример 4:
Input: "LVIII" Output: 58 Explanation: L = 50, V= 5, III = 3.
Пример 5:
Input: "MCMXCIV" Output: 1994 Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
思考方式
- 對於 _28 _, _ 29 _, _ 30_ 等 ...., 要 將 Ключ 與 сопоставление значений 起來 這邊 沒 問題, 但是 題目 提到 提到 是 後面 數值 較 一 一位 大 時, 必須 相減. 一 一們 得 從 字串 字串 後面 後面 開始算。
- 先將所有數值放進
Map()
物件,利用map()
有key
和value
的特性來取值相加。 - 一樣用使用迴圈從字串尾巴算,如果當前值(尾巴)大於或等於前一值就相加,否則相反。
解題筆記
心得
繼續累積!