[LeetCode] 13. 罗马数字转整数(java实现)
1. 题目
2. 读题(需要重点注意的东西)
思路:
记下几个关键的数字:
如果当前数的下一个的数比当前的数要小的话,加上负号,最后全部加起来即可。
如 MMDCIVIX
M------1000
M------1000
D-------500
C-------100
X---------10,小于下一个数 50 ------ -10
L--------50
I---------1,小于下一个数 10 ----- -1
X--------10
1000+1000+500+100-10+50-1+10 = 2649
3. 解法
---------------------------------------------------解法---------------------------------------------------:
class Solution {
public int romanToInt(String s) {
// 匿名内部类初始化哈希表
Map<Character,Integer> map = new HashMap<>(){
{
put('I',1);
put('V',5);
put('X',10);
put('L',50);
put('C',100);
put('D',500);
put('M',1000);
}
};
int res = 0;
for(int i = 0;i < s.length();i++){
if(i == s.length()-1) res += map.get(s.charAt(i));
else{
if(map.get(s.charAt(i)) < map.get(s.charAt(i+1))) res -= map.get(s.charAt(i));
else res += map.get(s.charAt(i));
}
}
return res;
}
}