LeetCode 13[罗马数字转整数]
题目
链接
LeetCode 13[罗马数字转整数]
详情
![LeetCode 13[罗马数字转整数]_整型](https://file.cfanz.cn/uploads/png/2024/11/18/11/c08BF0111V.png)
实例
![LeetCode 13[罗马数字转整数]_罗马数字_02](https://file.cfanz.cn/uploads/png/2024/11/18/11/bUIa99151S.png)
提示
![LeetCode 13[罗马数字转整数]_i++_03](https://file.cfanz.cn/uploads/png/2024/11/18/11/cB50FRa1FY.png)
题解
思路
遍历罗马字符串
如果元素是除了 '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;
    }
};    









