LeetCode 13[罗马数字转整数]

题目

链接

LeetCode 13[罗马数字转整数]

详情

实例

提示

题解

思路

遍历罗马字符串

如果元素是除了 'I'、'X'、'C' 以外的罗马字,即是 'V'、'L'、'D'、'M' 等元素,则直接加上罗马字对应的整型数字

如果元素是 'I' 则分以下几种情况:

  1. 此元素为最后一个元素,则直接加上罗马字对应的整型数字
  2. 此元素不是最后一个元素
    1. 如果下一个字符是罗马字 'V',则加上4
    2. 如果下一个字符是罗马字 'X',则加上9
    3. 如果下一个字符既不是罗马字 'V' 也不是罗马字 'X',则加上1

如果元素是 'X' 则分以下几种情况:

  1. 此元素为最后一个元素,则直接加上罗马字对应的整型数字
  2. 此元素不是最后一个元素
    1. 如果下一个字符是罗马字 'L',则加上40
    2. 如果下一个字符是罗马字 'C',则加上90
    3. 如果下一个字符既不是罗马字 'L' 也不是罗马字 'C',则加上10

如果元素是 'C' 则分以下几种情况:

  1. 此元素为最后一个元素,则直接加上罗马字对应的整型数字
  2. 此元素不是最后一个元素
    1. 如果下一个字符是罗马字 'D',则加上400
    2. 如果下一个字符是罗马字 'M',则加上900
    3. 如果下一个字符既不是罗马字 '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;
    }
};
posted @ 2024-11-11 11:55  EricsT  阅读(6)  评论(0编辑  收藏  举报