[leetcode] Roman to Integer | 罗马数字转换成整数
Posted August 14, 2013
on:看了看别人的答案,他们是利用了罗马数字的概念:从左往右,每次加上当前字母的面值就好了。如果前一个字母面值<后一个字母,说明当前字母是4,9的第二个字符。这个时候就减去两次前一个字母面值(因为前一步已经加一次了,这里发现其实是需要减,所以要减两次)。最后无论如何都要加上当前字母的面值。比如XIV(14),后一个字母是V时,发现>I,但此时result已经是10 + 1了,所以要-2,再+5。
public int romanToInt(String s) { Map<Character, Integer> map = new HashMap<Character, Integer>(); 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); char[] arr = s.toCharArray(); int res = map.get(arr[0]); for (int i = 1; i < arr.length; i++) { if (map.get(arr[i]) > map.get(arr[i - 1])) { res -= 2 * map.get(arr[i - 1]); } res += map.get(arr[i]); } return res; }
Tags: math
March 5, 2015 at 9:46 am
从右往左好计算。如果遇到比前一个更小的值。剪掉。