思路还是有的,后来对比了下之前的代码,发现思路是一样的。
用构建divider被除数的方法,把各个 被除数 列出来,将其对应的罗马数字符号一起,构建好一个map,很不幸,只能手动加map里的项目,不能初始化。。那就不断put吧。
剩下的就是 从小到达遍历 key的数字,很不幸,map.ketSet() 是一个set,不能按照排序来做。所以还得建一个int array,一次列好数字。通过遍历这个array来搜索对应的map中的value。
代码如下:
public class Solution {
public String intToRoman(int num) {
HashMap<Integer, String> table = new HashMap<Integer, String>();
table.put(1000, "M");
table.put(900, "CM");
table.put(500, "D");
table.put(400, "CD");
table.put(100, "C");
table.put(90, "XC");
table.put(50, "L");
table.put(40, "XL");
table.put(10, "X");
table.put(9, "IX");
table.put(5, "V");
table.put(4, "IV");
table.put(1, "I");
int order[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
StringBuilder result = new StringBuilder();
for(int divider : order){
if(num==0) break;
int count=num/divider;
String appendix = table.get(divider);
for(int i=1; i<=count; ++i) result.append(appendix);
num = num%divider;
}
return result.toString();
}
}