解法一:
class Solution {
public String intToRoman(int num) {
//map用于存放罗马数字的进制
Map<Integer, String> map = new HashMap<>();
map.put(1, "I");
map.put(4, "IV");
map.put(5, "V");
map.put(9, "IX");
map.put(10, "X");
map.put(40, "XL");
map.put(50, "L");
map.put(90, "XC");
map.put(100, "C");
map.put(400, "CD");
map.put(500, "D");
map.put(900, "CM");
map.put(1000, "M");
//list用于存放罗马数字的进制
List<Integer> list = new ArrayList<>(Arrays.asList(1,4,5,9,10,40,50,90,100,400,500,900,1000));
StringBuilder res = new StringBuilder();
while(num > 0){//判断条件不能是大于等于0,因为当等于0时就是死循环了
//每次从大的进制往下找,这才符合罗马数字的构造规则,才不会出现“8=VIII,而不是IVIV”的情况
for(int i = list.size() - 1; i >= 0; i--){
if(num >= list.get(i)){
num -= list.get(i);
res.append(map.get(list.get(i)));
break;//找到了就跳出,开始下一次新的循环while(num > 0),因为要每次从大的进制往下找
}
}
}
return res.toString();
}
}
本文介绍了一种将整数转换为罗马数字的算法实现。通过定义一个包含特定罗马数字及其对应值的映射表,并利用一个有序列表来表示罗马数字的不同位值,该算法能高效地完成转换过程。
506

被折叠的 条评论
为什么被折叠?



