leetcodeローマ数字回転整数

2450 ワード

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")); } }