feat: 刷题roman-to-integer
This commit is contained in:
82
13.roman-to-integer.java
Normal file
82
13.roman-to-integer.java
Normal file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* @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
|
||||
|
||||
Reference in New Issue
Block a user