로마에서 정수로
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.)