13. 罗马数字转整数
Posted 易小顺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13. 罗马数字转整数相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
说明
一、题目
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
二、分析
- 根据题意可知是一个字符串的转换问题,首先需要建立一个从
罗马字符
到阿拉伯数字
之间的转换映射(可以是任意的转换方式,map
集合、switch
判断皆可,但是索取元素的快慢影响整个算法的时间复杂度). - 转换规则为从头至尾的遍历当前字符串,如果比邻的两个字符的对应值是前者小于后者,则需要在总的技术中减去前者的转换值;如果是后者小于前者,则需要对前者进行相加。
- 只剩下一个字符就可以直接进行映射的数字相加即可,最终返回遍历相加的数据。
class Solution {
private int getNum(char ch) {
switch(ch) {
case 'I': return 1;
case 'X': return 10;
case 'C': return 100;
case 'M': return 1000;
case 'V': return 5;
case 'L': return 50;
case 'D': return 500;
default: return 0;
}
}
public int romanToInt(String s) {
int sum = 0;
int len = s.length();
for (int i = 0; i < len - 1; i++) {
int temp = getNum(s.charAt(i));
if (getNum(s.charAt(i + 1)) > temp) {
sum -= temp;
} else {
sum += temp;
}
}
sum += getNum(s.charAt(len - 1));
return sum;
}
}
总结
掌握字符与阿拉伯数字之间的映射方法,以及罗马数字和整数之间的关系。
以上是关于13. 罗马数字转整数的主要内容,如果未能解决你的问题,请参考以下文章