解析:
- 两种方式, 使用 hashmap表, 或者用二个数组对应, 首先,考虑一些特殊情况, 然后考虑正常的情况,
- 比如 51, 51大于50, 一旦大于较大的数值, 就减去它, 剩1,然后加上1, 就可以了。
- 比如 4, 9, 等特殊情况, 直接判断,出局
- 或者使用暴力解法, 因为题目限制最大不超过3999
代码:
function intToRoman(num: number): string {
let map = new Map<number, string>()
map.set(1000, 'M')
map.set(900, 'CM')
map.set(500, 'D')
map.set(400, 'CD')
map.set(100, 'C')
map.set(90, 'XC')
map.set(50, 'L')
map.set(40, 'XL')
map.set(10, 'X')
map.set(9, 'IX')
map.set(5, 'V')
map.set(4, 'IV')
map.set(1, 'I')
if (map.has(num)) {
return map.get(num)
}
let res: string = ""
for(let i of map){
while(num >= i[0]){
res += i[1]
num-= i[0]
}
}
return res
};
```