欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[leetcode]Roman to Integer

程序员文章站 2024-03-22 14:22:22
...

http://oj.leetcode.com/problems/roman-to-integer/

Given a roman numeral, convert it to an integer.

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

 题中大意为返回罗马数字(字符串)对应的整数。

我的想法很简单,逐位计算。

首先将I, V,X,L,C,D,M存放起来,并与下标做hash,假如第i位字符的下标小于后面的字符(i+1位)的下标,即小数写在了大数前面,表示减去这个小数。相反,如果第i位字符的下标>=i+1位的下标,即小数写在了大数的后面,表示加上这个小数。

代码就很简单了

 public int romanToInt(String s) {
		Map<Character, Integer> map = new HashMap<Character, Integer>();
		fillMap(map);
		int[] num = { 1, 5, 10, 50, 100, 500, 1000 };
		int result = 0;
		for (int i = 0; i < s.length(); ++i) {
			if (i < s.length() - 1
					&& map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) {
				result -= num[map.get(s.charAt(i))];
			} else {
				result += num[map.get(s.charAt(i))];
			}
		}
		return result;
    }
    	private void fillMap(Map<Character, Integer> map) {
		map.put('I', 0);
		map.put('V', 1);
		map.put('X', 2);
		map.put('L', 3);
		map.put('C', 4);
		map.put('D', 5);
		map.put('M', 6);
	}