로마에서 정수로
7724 단어 leetcodeeasycsharpalgorithms
문제 설명
로마 숫자는
I
, V
, X
, L
, C
, D
및 M
의 7가지 기호로 표시됩니다.Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
예를 들어
2
은 로마 숫자로 II
으로 표기되며 1을 2개만 더하면 됩니다. 12
은 XII
으로 작성되며 간단히 X + II
입니다. 숫자 27
은 XXVII
으로 표기되며 XX + V + II
입니다.로마 숫자는 일반적으로 왼쪽에서 오른쪽으로 큰 순서로 씁니다. 그러나 4의 숫자는
IIII
이 아닙니다. 대신 숫자 4는 IV
으로 표시됩니다. 1이 5보다 앞에 있기 때문에 빼면 4가 됩니다. 같은 원리가 IX
으로 쓰여진 숫자 9에도 적용됩니다. 빼기가 사용되는 경우는 6가지입니다.I
은 V
(5) 및 X
(10) 앞에 배치하여 4와 9를 만들 수 있습니다. X
은 L
(50) 및 C
(100) 앞에 배치하여 40 및 90을 만들 수 있습니다. C
은 D
(500) 및 M
(1000) 앞에 배치하여 400 및 900을 만들 수 있습니다. 로마 숫자가 주어지면 정수로 변환하십시오.
예 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
變數儲存加總,並先 할당 s
第 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 Solution
GitHub Repository
글 읽어주셔서 감사합니다 🌷 🌻 🌼
마음에 드셨다면 주저말고 하트 꾸욱 눌러주세요❤️
또는 내 Leetcode 솔루션에서 좋아요를 클릭하세요.
또는 내 GitHub 팔로우 ⭐
또는 커피를 사주세요 ⬇️ 감사합니다.
Reference
이 문제에 관하여(로마에서 정수로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fakestandard/roman-to-integer-ikj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)