算法核心:
1. 枚举出有限的罗马数字和阿拉伯数字,并一一对应
2. 通过贪心算法,每次从剩余的数字中找最大的值
// 数字转罗马1
public static String intToRoman2(int num) {
// 阿拉伯数字和罗马数字一一对应
String [] value = new String[]{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int [] key = new int[]{1000,900,500,400,100,90,50,40,10,9,5,4,1};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 13; i++) {
if (num > 0) {
int i1 = key[i];
// while 是重点,可能需要取同一个罗马数字,比如20,那么执行两次即可
while (num >= i1) {
sb.append(value[i]);
num -= i1;
}
}
}
return sb.toString();
}