/* * @lc app=leetcode id=13 lang=java * * [13] Roman to Integer */ // @lc code=start import java.util.Arrays; class Solution { public int romanToInt(String s) { return romanToInt(0, s, 0); } private int romanToInt(int c, String s, int i) { if(i == s.length()) { return c; } int r; if(i+1 < s.length() && COMBINED_FORMAT_LIST.contains(s.substring(i, i+2))) { r = romanToInt(c+getValue(s.substring(i, i+2)), s, i+2); } else { r = romanToInt(c+getValue(s.substring(i, i+1)), s, i+1); } return r; } private int getValue(String s) { int r = 0; switch(s) { case "IV": r = 4; break; case "IX": r = 9; break; case "XL": r = 40; break; case "XC": r = 90; break; case "CD": r = 400; break; case "CM": r = 900; break; case "I": r = 1; break; case "V": r = 5; break; case "X": r = 10; break; case "L": r = 50; break; case "C": r = 100; break; case "D": r = 500; break; case "M": r = 1000; break; default: throw new RuntimeException("invalid expr: "+s); } return r; } public static final List COMBINED_FORMAT_LIST = Arrays.asList( "IV","IX", "XL", "XC", "CD", "CM" ); } // @lc code=end