关于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


继续加油!:)

0
0

充电两分钟

提问者

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; 
    }
    自己做出来了


0
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程