13. Roman to Integer

Given a roman numeral, convert it to an integer.

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

1刷
题解:
"IV"代表4, "VI"代表6,那么就是说,较小的数字出现在较大的数字左边时,这里代表两者作差,即 较大数字 - 较小数字,否则代表两者的和。 这样我们就可以从左向右遍历字符串,先设定result = map.get(s.charAt(0)),然后从第一个位置开始遍历, 比较当前字符代表的数字和上一个字符代表的数字,根据我们上面得出的结论来计算。lastNum >= curNum时,我们直接加curNum, 当lastNum < curNum时,我们之前已经加过一次lastNum,所以这时候要加curNum并且减掉两个lastNum。最后返回结果。

如果用array替代map会更快

public class Solution {
    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 res = map.get(s.charAt(0));
        int lastNum = res;
        for(int i=1; i<s.length(); i++){
            int curNum = map.get(s.charAt(i));
            if(lastNum < curNum) res -= 2*lastNum;
            res += curNum;
            lastNum = curNum;
        }
        
        return res;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容