#13.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
Например, 2
записывается как II
в римской цифре, просто две единицы, сложенные вместе. Число 12
записывается как XII
, то есть просто X + II
. Число 27
записывается как XXVII
, то есть XX + V + II
.
Римские цифры обычно пишутся слева направо от наибольшей к наименьшей. Однако цифра четыре не является IIII
. Вместо этого число четыре записывается как IV
. Поскольку единица находится перед пятеркой, мы вычитаем ее, получая четыре. Тот же принцип применяется к числу девять, которое записывается как IX
. В шести случаях используется вычитание:
Дано римское число, преобразуйте его в целое число.
Пример 1
Input: s = "III"
Output: 3
Explanation: III = 3.
Пример 2
Input: s = "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.
Пример 3
Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
Пояснение
給定一個羅馬數字將其轉換成阿拉伯數字,羅馬數字通常會從左到右,由大到小來撰寫,但有一特性,數字 4
不寫成 IIII
而是 IV
,因為 4
在 5
之前,所以用 V
減去一個 I
得到 IV
也就是等於 4
。
相同原則下也是適用於 9
,轉換成羅馬數字為 IX
,題目也提供了六種使用這種減法的案例。
Решение
- 先過濾特定條件,判斷字串
s
是否為空字串或是null
,如果成立則返回0
- 接著將羅馬符號對應的數字分別裝進
Dictionary
供後續轉換使用 - 建立一個
counter
變數儲存加總,並先 assigns
第0
個索引轉換後的值 - 迴圈走訪字串內的從所有字符(除了第一個字),用一個
If Statements
來判斷是加法還是減法,正常原則是由大到小,所以條件可設為這次的羅馬符號大於上次則為減法- 條件成立:加總這次轉換的數值
- 條件不成立:邏輯是減去上次加總的,再加上這次的數值減去上次的數值
- 最後返回結果 счетчик
public int RomanToInt(string s)
{
if (s == null || s == String.Empty)
return 0;
IDictionary dic = new Dictionary<char, int>
{
{ 'I', 1 },
{ 'V', 5 },
{ 'X', 10 },
{ 'L', 50 },
{ 'C', 100 },
{ 'D', 500 },
{ 'M', 1000 }
};
int counter = (int)dic[s[0]];
for (int i = 0; i < s.Length; i++)
{
if ((int)dic[s[i - 1]] >= (int)dic[s[i]])
counter += (int)dic[s[i]];
else
{
counter += (int)dic[s[i]] - (int)dic[s[i - 1]] * 2;
}
}
return counter;
}
Ссылка
Решение LeetCode
Репозиторий GitHub
Спасибо, что прочитали статью 🌷 🌻 🌼
Если вам понравилось, пожалуйста, не стесняйтесь нажать на кнопку сердечко ❤️
или нажмите like на моем решении Leetcode
или следите за моим GitHub ⭐
или купите мне кофе ⬇️ Я буду благодарен.