原题
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Common knowledge
1-10的中间数:V(5)
10-100的中间数: L(50)
100-1000的中间数:500(D)
so
- I placed before V or X indicates one less, so four is IV (one less
than five) and nine is IX (one less than ten) - X placed before L or C indicates ten less, so forty is XL (ten less
than fifty) and ninety is XC (ten less than a hundred) - C placed before D or M indicates a hundred less, so four hundred is CD (a hundred less than five
hundred) and nine hundred is CM (a hundred less than a thousand)
For example, MCMIV is one thousand nine hundred and four, 1904 (M is a thousand, CM is nine hundred and IV is four).
代码实现
public int RomanToInt(string s)
{
Dictionary<char, int> T = new Dictionary<char, int>{
{ 'I' , 1 },
{ 'V' , 5 },
{ 'X' , 10 },
{ 'L' , 50 },
{ 'C' , 100 },
{ 'D' , 500 },
{ 'M' , 1000 }
};
int sum = T[s[s.Length-1]];
for (int i = s.Length - 2; i >= 0; --i)
{
//if T[s[i]]<T[s[i+1]] indicates it should subtract T[s[i]]
//for example:I placed before V indicates one less, so four is IV
if (T[s[i]] < T[s[i + 1]])
{
sum -= T[s[i]];
}
else //else adds
{
sum += T[s[i]];
}
}
return sum;
}
题库
leetcode算法题目解决方案每天更新在github库中,欢迎感兴趣的朋友加入进来,也欢迎star,或pull request。https://github.com/jackzhenguo/leetcode-csharp