Press "Enter" to skip to content

13. 罗马数字转整数

方法一:

  • 创建一个哈希表将罗马字符与对应的数值关联起来。
  • 然后对字符串进行遍历,由于组合只有两种情况,一种是一个字符,一种是两个字符,其中两个字符优先于一个字符
  • 先判断两个字符的组合在哈希表中是否存在,存在则将值取出加到结果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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注