13. 罗马数字转整数
题目:
思路:
【1】首先很重要的一点便是最后一个字符转成值必然是要加的,其次如果某个字符比下一个字符的值要小就是需要减的。
代码展示:
//时间4 ms 击败 58.62% //内存42.3 MB 击败 49.45% class Solution { public int romanToInt(String s) { HashMap<Character, Integer> map = new HashMap<Character, Integer>() {{ put('I',1); put('V',5); put('X',10); put('L',50); put('C',100); put('D',500); put('M',1000); }}; int result = 0 , cur = 0; for (int i = 0; i < s.length(); i++){ // 获取到当前字符所代表的的值 cur = map.get(s.charAt(i)); // 判断该值是该加还是该减 // 首先如果是最后一个字符,必然是加的 // 其次如果该字符是要减的话必然是比下一个字符要小,否则还是加的 if (i < s.length() - 1 && cur < map.get(s.charAt(i+1)) ){ result -= cur; }else { result += cur; } } return result; } } //时间2 ms 击败 100% //内存42.3 MB 击败 48.15% class Solution { public int romanToInt(String s) { int result = 0 , cur = 0; for (int i = 0; i < s.length(); i++){ // 获取到当前字符所代表的的值 cur = getInt(s.charAt(i)); // 判断该值是该加还是该减 // 首先如果是最后一个字符,必然是加的 // 其次如果该字符是要减的话必然是比下一个字符要小,否则还是加的 if (i < s.length() - 1 && cur < getInt(s.charAt(i+1)) ){ result -= cur; }else { result += cur; } } return result; } public int getInt(char romanDigit) { switch (romanDigit) { case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; default: return 0; } } }