美文网首页
13. 罗马数字转整数

13. 罗马数字转整数

作者: 雇个城管打天下 | 来源:发表于2018-04-26 08:55 被阅读17次

思路

比如IXX,使用临时变量temp保存上一个已经遍历的罗马数字,比如:遍历时是从后往前遍历的:1>  刚开始时,temp = 0; 遍历当前遍历到第一个X,则temp == 0 < 10 == X ,则res = 10;temp = 10;2> 继续向前遍历,又遇到X,此时temp == 10 = 10 == X,则 res = res + 10;即res = 20; temp = 10;3> 继续向前遍历,遇到I,此时temp == 10 > 1 == I; 则 res = res - 1; 即res = 19; temp = 1;循环终止;

代码

public int romanToInt(String s) {
        char[] cs = s.toCharArray();
        Map<Character, Integer> hm = new HashMap<>();
        hm.put('I', 1);
        hm.put('V', 5);
        hm.put('X', 10);
        hm.put('L', 50);
        hm.put('C', 100);
        hm.put('D', 500);
        hm.put('M', 1000);
        int res = 0;
        int temp = 0;     //临时变量
        int value = 0;      //当前罗马值的大小
        for (int i = cs.length - 1; i >= 0; i--) {
            value = hm.get(cs[i]);
            if (temp <= value) {
                res += value;
                temp = value;
            } else {
                res -= value;
                temp = value;
            }
        }
        return res;
    }

相关文章

网友评论

      本文标题:13. 罗马数字转整数

      本文链接:https://www.haomeiwen.com/subject/affplftx.html