1.索引
class Solution {
public int romanToInt(String s) {
int sum = 0;
int preNum = switchcase(s.charAt(0));
for(int i = 1;i < s.length(); i ++) {
int num = switchcase(s.charAt(i));
if(preNum < num) {
sum -= preNum;
} else {
sum += preNum;
}
preNum = num;
}
sum += preNum;
return sum;
}
int switchcase(char rom){
switch(rom){
case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
default:return 0;
}
}
}
这个代码关键在于charAt(int index)方法的掌握和使用,它的作用说白了就是拆分字符串,把里面的字符一个个捞出来,在以后应该也能用得上。
百度解释:
charAt(int index)方法是一个能够用来检索特定索引下的字符的String实例的方法。charAt()方法返回指定索引位置的char值。索引范围为0~length()-1,如: str.charAt(0)检索str中的第一个字符,str.charAt(str.length()-1)检索最后一个字符。
2.HashMap
class Solution {
public int romanToInt(String s) {
Map<String, Integer> map = new HashMap<>();
map.put("I", 1);
map.put("IV", 4);
map.put("V", 5);
map.put("IX", 9);
map.put("X", 10);
map.put("XL", 40);
map.put("L", 50);
map.put("XC", 90);
map.put("C", 100);
map.put("CD", 400);
map.put("D", 500);
map.put("CM", 900);
map.put("M", 1000);
int ans = 0;
for(int i = 0;i < s.length();) {
if(i + 1 < s.length() && map.containsKey(s.substring(i, i+2))) {
ans += map.get(s.substring(i, i+2));
i += 2;
} else {
ans += map.get(s.substring(i, i+1));
i ++;
}
}
return ans;
}
}
将正确的组合列出来了,少了大小的判断,个人认为没有第一种思维好。