给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
-
示例 1:
输入: “III”
输出: 3 -
示例 2:
输入: “IV”
输出: 4 -
示例 3:
输入: “IX”
输出: 9 -
示例 4:
输入: “LVIII”
输出: 58
解释: L = 50, V= 5, III = 3. -
示例 5:
输入: “MCMXCIV”
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.
提示:
题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。
IC 和 IM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX 。
关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics 。
通过次数275,501提交次数443,586
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/roman-to-integer
思路
- 想法比较简单,直接遍历一遍字符串,读到无歧义的数字则直接加上相应的数字;若是如4、9等有歧义的数字则还需先判断是否是这些数字。
代码
class Solution {
public:
int romanToInt(string s) {
int i;
int num=0;
for(i=0;i<s.length();i++)
{
if(s[i]=='M') num+=1000;
if(s[i]=='D') num+=500;
if(s[i]=='L') num+=50;
if(s[i]=='V') num+=5;
if(s[i]=='C' && s[i+1]=='M')
{
num+=900;
i++;
}
else if(s[i]=='C' && s[i+1]=='D')
{
num+=400;
i++;
}
else if(s[i]=='C') num+=100;
if(s[i]=='X' && s[i+1]=='C')
{
num+=90;
i++;
}
else if(s[i]=='X' && s[i+1]=='L')
{
num+=40;
i++;
}
else if(s[i]=='X') num+=10;
if(s[i]=='I' && s[i+1]=='X')
{
num+=9;
i++;
}
else if(s[i]=='I' && s[i+1]=='V')
{
num+=4;
i++;
}
else if(s[i]=='I') num+=1;
}
return num;
}
};