LeetCode 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. 字符串相乘 | 中等 | 字符串模拟 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!