问题描述:将罗马数字转换成整数
思路:
- 方法一
设置目标整数tar初始为0。遍历字符串,如果当前罗马字符比下一字符大,tar加上该罗马数字对应整数,反之减去该值。
- 方法二:
将所有罗马数字对应整数情况进行映射,在遍历字符串的过程中判断是否出现双字符对应情况,出现则加双字符对应值,否则加单字符对应值。
//java
//方法一
class Solution {
public int romanToInt(String s) {
String key = "MDCLXVI";
int[] value = {1000, 500, 100, 50, 10, 5, 1};
int tar = 0;
for(int i = 0; i < s.length(); ++i){
int left = key.indexOf(s.charAt(i));
if(i == s.length()-1 || value[left] >= value[key.indexOf(s.charAt(i+1))]) tar += value[left];
else tar -= value[left];
}
return tar;
}
}
//方法二
class Solution {
public int romanToInt(String s) {
HashMap<String, Integer> roman = new HashMap<String, Integer>(){
{put("I", 1);put("IV", 4);put("V", 5);put("IX", 9);put("X", 10);put("XL", 40);put("L", 50);
put("XC", 90);put("C", 100);put("CD", 400);put("D", 500);put("CM", 900);put("M", 1000);}
};
int tar = 0;
for(int i = 0; i < s.length();){
if(i < s.length() - 1 && roman.containsKey(s.substring(i, i+2))){//双字符是否在罗马字符表里
tar += roman.get(s.substring(i, i+2));
i += 2;
}else{
tar += roman.get(s.substring(i, i+1));
++i;
}
}
return tar;
}
}