`
huntfor
  • 浏览: 201314 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[leetcode]Roman to Integer

 
阅读更多

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);
	}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics