方法一:
- 创建一个哈希表将罗马字符与对应的数值关联起来。
- 然后对字符串进行遍历,由于组合只有两种情况,一种是一个字符,一种是两个字符,其中两个字符优先于一个字符
- 先判断两个字符的组合在哈希表中是否存在,存在则将值取出加到结果
ans
中,并向后移两个字符。不存在则判断当前1个字符是否存在,存在则将值去除加到结果ans
中,并向后移1个字符,最后遍历结束返回结果ans
C 代码题解
int romanToInt(char* s) {
int symbolValues[26];
symbolValues['I' - 'A'] = 1;
symbolValues['V' - 'A'] = 5;
symbolValues['X' - 'A'] = 10;
symbolValues['L' - 'A'] = 50;
symbolValues['C' - 'A'] = 100;
symbolValues['D' - 'A'] = 500;
symbolValues['M' - 'A'] = 1000;
int ans = 0;
int n = strlen(s);
for (int i = 0; i < n; ++i) {
int value = symbolValues[s[i] - 'A'];
if (i < n - 1 && value < symbolValues[s[i + 1] - 'A']) {
ans -= value;
} else {
ans += value;
}
}
return ans;
}
Python3 代码题解
class Solution:
SYMBOL_VALUES = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
}
def romanToInt(self, s: str) -> int:
ans = 0
n = len(s)
for i, ch in enumerate(s):
value = Solution.SYMBOL_VALUES[ch]
//判断当前字符是否是特殊情况,即当前字符的数值小于下一个字符的数值。如果是特殊情况,需要减去当前字符的数值。
if i < n - 1 and value < Solution.SYMBOL_VALUES[s[i + 1]]:
ans -= value
else:
ans += value
return ans
Source: LeetCode(The title reproduced in this blog is for personal study use only)
Be First to Comment