简单题 罗马数字转整数
题解
- 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M
字符 数值
I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000
- 部分特殊的罗马数字如IV,IX等,分别代表4,9。
- 普通的字符串按照从大到小排序,只要将他们代表的数字相加即可;特殊的字符串为代表小的字符在代表大的字符前面。
- 通过观察发现每5个数字为一组就会有特殊的字符出现,且规律相同。
- 得出通过判断前一个字符代表的数字是否大于后一个字符代表的数字,进行加减。
java代码
class Solution {
//将所需的罗马数字和代表的数字分别利用Map的键值对存储
Map<Character,Integer> luoma = new HashMap<Character,Integer>(){
{
put('I',1);
put('V',5);
put('X',10);
put('L',50);
put('C',100);
put('D',500);
put('M',1000);
}
};
public int romanToInt(String s){
int k = 0;
int n = s.length();
for(int i = 0;i < n;++i){
int num = luoma.get(s.charAt(i));
//判断前一个字符代表的数字是否大于后一个字符代表的数字,或者比较他们相应的键的值,进行加减。
//个人认为只需要一个条件即可,为了严谨全部加上
if(i < n - 1 && num < luoma.get(s.charAt(i + 1))){
k -= num;
}else{
k += num;
}
}
return k;
}
}
测试结果
- 作者:麦克猫Cat
- 本文版权归作者和CSDN共有,欢迎交流