import java.util.*; /** * NC361 整数转罗马数字 * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return string字符串 */ public String ArabicToRoman (int n) { // return solution1(n); return solution2(n); } private final int[] values = new int[]{1000, 500, 100, 50, 10, 5, 1}; private final HashMap<Integer,Character> map = new HashMap<Integer,Character>(){{ put(1, 'I'); put(5, 'V'); put(10, 'X'); put(50, 'L'); put(100, 'C'); put(500, 'D'); put(1000, 'M'); }}; /** * 哈希: HashMap * @param n * @return */ private String solution1(int n){ StringBuilder sb = new StringBuilder(); int remain = n; int times; for(int val: values){ times = remain/val; remain = remain%val; while(times-- > 0){ sb.append(map.get(val)); } if(remain == 0){ break; } } // 四连情况处理 VIIII LXXXX DCCCC | IIII XXXX CCCC String result = sb.toString().replace("VIIII", "IX").replace("LXXXX", "XC").replace("DCCCC", "CM").replace("IIII", "IV").replace("XXXX", "XL").replace("CCCC", "CD"); return result; } ////////////////////////////////////////////////////////////////////////////////////////////////// private final int[] arabics = new int[]{1000,900,500,400,100,90,50,40,10,9,5,4,1}; private final String[] romans = new String[]{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; /** * 哈希: 数组 * @param n * @return */ private String solution2(int n){ StringBuilder sb = new StringBuilder(); int remain = n; int times; int val; for(int i=0; i<arabics.length; i++){ val = arabics[i]; times = remain/val; remain = remain%val; while(times-- > 0){ sb.append(romans[i]); } if(remain == 0){ break; } } return sb.toString(); } }