Roman to Integer

来源:互联网 发布:rxjava 源码 编辑:程序博客网 时间:2024/05/22 10:33

网上大部分参考都是从左往右计算,但是当中有一处要*2,这个没有合适的解释,

遂采用从右往左的计算,

左边大于等于右边直接加上左边的值,

左边小于右边,结果减去当前的值

public int romanToInt(String s) {        if (s == null || s.length() == 0) {            return 0;        }        Map<Character, 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);                int result = map.get(s.charAt(s.length() - 1));        for (int i = s.length() - 2; i >= 0; i--) {            //if (map.get(s.charAt(i)) > map.get(s.charAt(i + 1))) {            if (map.get(s.charAt(i)) >= map.get(s.charAt(i + 1))) {                result = result + map.get(s.charAt(i));            } else {                result = result - map.get(s.charAt(i));            }        }        return result;                                // for (int i = 0; i < s.length(); i++) {        //     char c = s.charAt(i);        //     if (i > 0 && map.get(s.charAt(i - 1)) < map.get(s.charAt(i))) {        //         result = result - 2*map.get(s.charAt(i - 1)) + map.get(s.charAt(i));        //     } else {        //         result = result + map.get(s.charAt(i));        //     }        // }        // return result;    }


0 0
原创粉丝点击