題目傳送門: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.

思考方式

  1. 對於 _28 _, _ 29 _, _ 30_ 等 ...., 要 將 Ключ 與 сопоставление значений 起來 這邊 沒 問題, 但是 題目 提到 提到 是 後面 數值 較 一 一位 大 時, 必須 相減. 一 一們 得 從 字串 字串 後面 後面 開始算。
  2. 先將所有數值放進Map()物件,利用map()keyvalue的特性來取值相加。
  3. 一樣用使用迴圈從字串尾巴算,如果當前值(尾巴)大於或等於前一值就相加,否則相反。

解題筆記

心得

繼續累積!