关于Leetcode上第13题的一些疑问
来源:9-1 什么是线段树
充电两分钟
2020-02-14
bobo老师,第13题是罗马数字转换的问题,我的Java代码如下
public int romanToInt(String s) {
TreeMap<Character, Integer> map = new TreeMap<>();
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);
int res = 0;
for(int i = 0; i < s.length() - 1; i ++) {
if(map.get(s.charAt(i)) < map.get(s.charAt(i+1))) {
res = res + (map.get(s.charAt(i+1)) - map.get(s.charAt(i)));
i ++;
}
else
res = res + map.get(s.charAt(i));
}
return res;
}
我的代码在罗马数字按通常情况下计算结果总比正确结果少1,特例情况下是正常的。我知道是边界问题,res在最后一次没有加。但是不知道如何修改,麻烦bobol老师帮忙看一下!谢谢!
写回答
2回答
-
liuyubobobo
2020-02-14
可以参考我的代码(C++),对比你的逻辑,看看问题在哪里?
传送门:https://github.com/liuyubobobo/Play-Leetcode/blob/master/0013-Roman-to-Integer/cpp-0013/main.cpp
继续加油!:)
00 -
充电两分钟
提问者
2020-02-14
public int romanToInt(String s) { TreeMap<Character, Integer> map = new TreeMap<>(); 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); int res = 0; for(int i = 0; i < s.length(); i ++) { if((i + 1) < s.length() && map.get(s.charAt(i)) < map.get(s.charAt(i+1))) { res = res + (map.get(s.charAt(i+1)) - map.get(s.charAt(i))); i ++; } else res = res + map.get(s.charAt(i)); } return res; } 自己做出来了
00
相似问题
老师,关于leetcode的677问题
回答 2
leetcode上的第15题
回答 1