13. Roman to Integer 发表于 2022-09-10 Math1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950class Solution { public int romanToInt(String s) { int res = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); char nextC = i + 1 < s.length() ? s.charAt(i + 1) : ' '; if ((c == 'I' && (nextC == 'V' || nextC == 'X')) || (c == 'X' && (nextC == 'L' || nextC == 'C')) || (c == 'C' && (nextC == 'D' || nextC == 'M'))) { res += romanUnitToInt("" + c + nextC); i++; // 不要忘记偏移 i, 因为消耗了两个字符 } else { res += romanUnitToInt(String.valueOf(c)); } } return res; } private int romanUnitToInt(String s) { switch (s) { 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; case "IV": return 4; case "IX": return 9; case "XL": return 40; case "XC": return 90; case "CD": return 400; case "CM": return 900; default: throw new IllegalArgumentException("Illegal raman unit: " + s); } }} Math12345678910111213141516171819202122232425262728293031323334353637383940class Solution { public int romanToInt(String s) { int res = 0; int preNum = romanUnitToInt(s.charAt(0)); for (int i = 1; i < s.length(); i++) { char c = s.charAt(i); int num = romanUnitToInt(c); if (preNum < num) { res -= preNum; } else { res += preNum; } preNum = num; } res += preNum; return res; } private int romanUnitToInt(char s) { switch (s) { 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: throw new IllegalArgumentException("Illegal raman char: " + s); } }} Reference13. Roman to Integer