LeetCode 13[罗马数字转整数]
题目
链接
详情
实例
提示
题解
思路
遍历罗马字符串
如果元素是除了 'I'、'X'、'C' 以外的罗马字,即是 'V'、'L'、'D'、'M' 等元素,则直接加上罗马字对应的整型数字
如果元素是 'I' 则分以下几种情况:
- 此元素为最后一个元素,则直接加上罗马字对应的整型数字
- 此元素不是最后一个元素
- 如果下一个字符是罗马字 'V',则加上4
- 如果下一个字符是罗马字 'X',则加上9
- 如果下一个字符既不是罗马字 'V' 也不是罗马字 'X',则加上1
如果元素是 'X' 则分以下几种情况:
- 此元素为最后一个元素,则直接加上罗马字对应的整型数字
- 此元素不是最后一个元素
- 如果下一个字符是罗马字 'L',则加上40
- 如果下一个字符是罗马字 'C',则加上90
- 如果下一个字符既不是罗马字 'L' 也不是罗马字 'C',则加上10
如果元素是 'C' 则分以下几种情况:
- 此元素为最后一个元素,则直接加上罗马字对应的整型数字
- 此元素不是最后一个元素
- 如果下一个字符是罗马字 'D',则加上400
- 如果下一个字符是罗马字 'M',则加上900
- 如果下一个字符既不是罗马字 'D' 也不是罗马字 'M',则加上100
代码
class Solution {
public:
int romanToInt(string s) {
int iSize = s.size();
int iRet = 0;
for (int i = 0; i < iSize; i++)
{
switch (s.at(i))
{
case 'I':
if (i < iSize - 1)
{
if ('V' == s.at(i + 1))
{
iRet += 4;
i++;
break;
}
if ('X' == s.at(i + 1))
{
iRet += 9;
i++;
break;
}
}
iRet += 1;
break;
case 'V':
iRet += 5;
break;
case 'X':
if (i < iSize - 1)
{
if ('L' == s.at(i + 1))
{
iRet += 40;
i++;
break;
}
if ('C' == s.at(i + 1))
{
iRet += 90;
i++;
break;
}
}
iRet += 10;
break;
case 'L':
iRet += 50;
break;
case 'C':
if (i < iSize - 1)
{
if ('D' == s.at(i + 1))
{
iRet += 400;
i++;
break;
}
if ('M' == s.at(i + 1))
{
iRet += 900;
i++;
break;
}
}
iRet += 100;
break;
case 'D':
iRet += 500;
break;
case 'M':
iRet += 1000;
break;
default:break;
}
}
return iRet;
}
};
本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/18539416