LeetCode 13[羅馬數字轉整數]

EricsT發表於2024-11-11

題目

連結

LeetCode 13[羅馬數字轉整數]

詳情

LeetCode 13[羅馬數字轉整數]

例項

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;
    }
};

相關文章