Files
leetcode/13.roman-to-integer.java
2025-07-13 23:39:29 +08:00

83 lines
1.9 KiB
Java

/*
* @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<String> COMBINED_FORMAT_LIST = Arrays.asList(
"IV","IX", "XL", "XC", "CD", "CM"
);
}
// @lc code=end