13. Roman to Integer

Description

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

Solution

Iterative, time O(n), space O(1)

找规律,升序的"ab"中需要减a加b,降序或相等则直接加a即可。貌似roman表达中升序序列长度都是2。

class Solution {
    public int romanToInt(String s) {
        String t = "IVXLCDM";
        int[] nums = {1, 5, 10, 50, 100, 500, 1000};
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < t.length(); ++i) {
            map.put(t.charAt(i), nums[i]);
        }
        
        s += "I";   // trick
        int val = 0;
        for (int i = 0; i < s.length() - 1; ++i) {
            if (map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) {
                val -= map.get(s.charAt(i));
            } else {
                val += map.get(s.charAt(i));
            }
        }
        
        return val;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。