public static String intToRoman(int num) {
StringBuilder sb = new StringBuilder();
Map<String, Integer> map = new LinkedHashMap<String, Integer>();
map.put("M",1000);
map.put("CM",900);
map.put("D",500);
map.put("CD",400);
map.put("C",100);
map.put("XC",90);
map.put("L",50);
map.put("XL",40);
map.put("X",10);
map.put("IX",9);
map.put("V",5);
map.put("IV",4);
map.put("I",1);
System.out.println(map);
Set<String> keySet = map.keySet();
while(num>0){
for(String key:keySet){
if(map.get(key)<=num) {
num-= map.get(key);
sb.append(key);
break;
}
}
}
return sb.toString();
}
一开始用的HashMap存储数据,结果发现他不能够按序存储,在网上查资料又使用了LinkedHashMap,虽然最后通过了,但时间和内存分别击败了5%和15%的人,很显然这个方法是不够好的。
推荐使用官方解法:
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};