一、题目
二、代码
class Solution {
public int romanToInt(String s) {
Map<Character, Integer> numsMap = new HashMap<>();
numsMap.put('I', 1);
numsMap.put('V', 5);
numsMap.put('X', 10);
numsMap.put('L', 50);
numsMap.put('C', 100);
numsMap.put('D', 500);
numsMap.put('M', 1000);
int result = 0;
int len = s.length();
for(int i = 0; i < len; i++){
boolean flag = false;//判断是否为六种特殊情况的标志
char c = s.charAt(i);
switch(c){
case 'I':{
if(i + 1 < len && s.charAt(i + 1) == 'V'){
result += 4;
i++;
flag = true;
break;
}
if(i + 1 < len && s.charAt(i + 1) == 'X'){
result += 9;
i++;
flag = true;
break;
}
break;
}
case 'X':{
if(i + 1 < len && s.charAt(i + 1) == 'L'){
result += 40;
i++;
flag = true;
break;
}
if(i + 1 < len && s.charAt(i + 1) == 'C'){
result += 90;
i++;
flag = true;
break;
}
break;
}
case 'C':{
if(i + 1 < len && s.charAt(i + 1) == 'D'){
result += 400;
i++;
flag = true;
break;
}
if(i + 1 < len && s.charAt(i + 1) == 'M'){
result += 900;
i++;
flag = true;
break;
}
break;
}
default:{
break;
}
}
if(flag == false){
int num = numsMap.get(c);
result += num;
}
}
return result;
}
}
上述代码较为复杂,如果HashMap中存入IV IX XL XC CD CM会大大减少代码量,更优雅。
class Solution {
public int romanToInt(String s) {
Map<String, Integer> numsMap = new HashMap<>();
numsMap.put("I", 1);
numsMap.put("IV", 4);
numsMap.put("V", 5);
numsMap.put("IX", 9);
numsMap.put("X", 10);
numsMap.put("XL", 40);
numsMap.put("L", 50);
numsMap.put("XC", 90);
numsMap.put("C", 100);
numsMap.put("CD", 400);
numsMap.put("D", 500);
numsMap.put("CM", 900);
numsMap.put("M", 1000);
int result = 0;
for(int i = 0;i < s.length(); i++) {
if(i + 1 < s.length() && numsMap.containsKey(s.substring(i, i+2))) {
result += numsMap.get(s.substring(i, i+2));
i += 1;
} else {
result += numsMap.get(s.substring(i, i+1));
}
}
return result;
}
}