特点:字符串的从前向后代表的数应该是逐渐减小的,所以我们不仅要考虑单个字符代表的数,还要向后多看一个,以免出现两个字符组合的情况,但是两个字符的组合特点,前一个字符单独代表的数一定比后面那个单独代表的数值小,我们利用这一点判断两个字符组合的情况
时间空间复杂度过高,我的算法并不好,大家借鉴的看一下吧!!!
class Solution {
public int romanToInt(String s) {
Map <String ,Integer> map = new HashMap<>();
map.put("I",1);
map.put("V",5);
map.put("X",10);
map.put("L",50);
map.put("C",100);
map.put("D",500);
map.put("M",1000);
map.put("IV",4);
map.put("IX",9);
map.put("XC",90);
map.put("XL",40);
map.put("CD",400);
map.put("CM",900);
String temp="";
int ans= 0;
for(int i = 0;i<s.length(); i++){
if((i!=s.length()-1)&&map.get(temp+s.charAt(i))<map.get(temp+s.charAt(i+1))){
ans+=map.get(temp+s.charAt(i)+s.charAt(++i));
} else ans += map.get(temp+s.charAt(i));
}
return ans;
}
}
结果:
另外,在leetcode上面看到的同僚的思路真的是不错,拿来给大家看一下,很不错的总结
他的算法明显好理解,虽然都是向后看一个字符!!!