解题思路
将整数转换为罗马数字的核心在于理解其组合规则。罗马数字并非简单的加法,其中包含特殊的减法规则,例如 4 写作 IV,9 写作 IX。为了简化逻辑,我们可以预先建立一个有序映射表,涵盖所有基础符号及其对应的特殊组合值。
具体做法是采用贪心算法。我们维护一个从大到小排列的数值数组,以及对应的符号映射。在转换过程中,不断尝试用当前最大的数值去减掉输入的数字,只要还能减,就追加对应的符号,直到该数值无法再被使用为止。这种方法避免了复杂的条件分支判断,代码结构非常直观。
代码实现
下面是基于 Kotlin 的具体实现。注意观察 valueToChar 映射和 array 的顺序,这是算法正确性的关键。
class Solution {
fun intToRoman(num: Int): String {
var value = num
val valueToChar = mapOf(
1 to "I", 4 to "IV", 5 to "V", 9 to "IX",
10 to "X", 40 to "XL", 50 to "L", 90 to "XC",
100 to "C", 400 to "CD", 500 to "D", 900 to "CM",
1000 to "M"
)
val array = arrayOf(1000, 900, 500, 400, 100, 90, 50, 40, 10, , , , )
result = StringBuilder()
(item array) {
(value >= item) {
result.append(valueToChar[item])
value -= item
}
(value == )
}
result.toString()
}
}

