leetcodeローマ数字回転整数
package leetcode. ;
import java.util.HashMap;
/**
* : I, V, X, L,C,D M。
*
*
* I 1
* V 5
* X 10
* L 50
* C 100
* D 500
* M 1000
* , 2 II , 1。12 XII , X + II 。 27 XXVII, XX + V + II 。
*
* , 。 , 4 IIII, IV。 1 5 , 5 1 4 。 , 9 IX。 :
*
* I V (5) X (10) , 4 9。
* X L (50) C (100) , 40 90。
* C D (500) M (1000) , 400 900。
* , 。 1 3999 。
*
* 1:
*
* : "III"
* : 3
* 2:
*
* : "IV"
* : 4
* 3:
*
* : "IX"
* : 9
* 4:
*
* : "LVIII"
* : 58
* : L = 50, V= 5, III = 3.
* 5:
*
* : "MCMXCIV"
* : 1994
* : M = 1000, CM = 900, XC = 90, IV = 4.
*/
public class Solution {
public static int romanToInt(String s) {
// , , ,
// , 。 XIV 10+1+5=16
// : , 。
HashMap map = new HashMap();
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
int res = 0;
int pre = 0;
int current = 0;
for (char c : s.toCharArray()) {
//IV IX XL XC CD CM
// 5 10 , 2
// IV 1+5-2 4
//iX 1+10-2 9
// , , ,
current = map.get(c);
if (pre != 0) {
if (current /pre == 5 || current / pre == 10) {
res=res+ (current-pre)-pre;
pre = current;
continue;
}
}
res = current + res;
pre = current;
}
return res;
}
public static void main(String[] args) {
System.out.println(romanToInt("MCMXCIV"));
}
}