LeetCode 13. 罗马数字转整数

题目描述

13. 罗马数字转整数

思路分析

解法一:从左到右比较相邻值(推荐)

核心思路

  • 用哈希表记录罗马字符的数值。
  • 从左到右遍历,若当前字符值小于下一个字符值,则应减去当前值;否则加上当前值。
  • 最后累加得到结果。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示字符串长度。
  • 空间复杂度:O(1),只使用固定大小映射。
// 相邻比较,决定加减
class Solution {
    public int romanToInt(String s) {
        Map<Character, Integer> map = new HashMap<>();
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);

        int res = 0;
        for (int i = 0; i < s.length(); i++) {
            int val = map.get(s.charAt(i));
            if (i + 1 < s.length() && val < map.get(s.charAt(i + 1))) {
                res -= val;
            } else {
                res += val;
            }
        }
        return res;
    }
}
// 相邻比较,决定加减
func romanToInt(s string) int {
	val := map[byte]int{
		'I': 1,
		'V': 5,
		'X': 10,
		'L': 50,
		'C': 100,
		'D': 500,
		'M': 1000,
	}

	res := 0
	for i := 0; i < len(s); i++ {
		cur := val[s[i]]
		if i+1 < len(s) && cur < val[s[i+1]] {
			res -= cur
		} else {
			res += cur
		}
	}
	return res
}

相似题目

题目 难度 考察点
12. 整数转罗马数字 中等 模拟
168. Excel 表列名称 简单 进制转换
171. Excel 表列序号 简单 进制转换
67. 二进制求和 简单 字符串模拟
415. 字符串相加 简单 字符串模拟
43. 字符串相乘 中等 字符串模拟
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/68898668
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!