題目
連結
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;
}
};