题目
示例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.
思路
用switch,case语句,从给定字符串的第一位判断到最后一位,每个罗马数字都对应一个阿拉伯数字的值,值得注意的是上文给出的六种特殊情况,在代码中有所判断便可。
代码
public class Solution {
public int RomanToInt(string s) {
int len = s.Length;
int result = 0;
for(int i=0;i<len;i++)
{
switch(s[i])
{
case 'I':
if ( i + 1 < len&&(s[i + 1] == 'V' || s[i + 1] == 'X') ) { result -= 1; }
else { result += 1; }
break;
case 'V':
result += 5;
break;
case 'X':
if ( i + 1 < len && (s[i + 1] == 'L' || s[i + 1] == 'C') ) { result -= 10; }
else { result += 10; }
break;
case 'L':
result += 50;
break;
case 'C':
if (i + 1 < len && (s[i + 1] == 'D' || s[i + 1] == 'M') ) { result -= 100; }
else { result += 100; }
break;
case 'D':
result += 500;
break;
case 'M':
result += 1000;
break;
}
}
return result;
}
}
实验结果
执行用时 :112 ms, 在所有 C# 提交中击败了98.48%的用户内存消耗 :24.7 MB, 在所有 C#>提交中击败了5.69%的用户