Skip to content
Yunhan's Lab
Go back

Leetcode12: 整数转罗马数字

Updated:
Edit page

题目

七个不同的符号代表罗马数字,其值如下:

符号
I1
V5
X10
L50
C100
D500
M1000

罗马数字是通过添加从最高到最低的小数位值的转换形成的。将小数位转换为罗马数字有以下规则:

示例 1

输入:num = 3749

输出: “MMMDCCXLIX”

解释:

3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M)
700 = DCC 由于 500 (D) + 100 (C) + 100 (C)
40 = XL 由于 50 (L) 减 10 (X)
9 = IX 由于 10 (X) 减 1 (I)

注意:49 不是 50 (L) 减 1 (I) 因为转换是基于小数位


硬编码数字

class Solution:

    THOUSANDS = ["", "M", "MM", "MMM"]
    HUNDREDS = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
    TENS = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
    ONES = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]

    def intToRoman(self, num: int) -> str:
        return Solution.THOUSANDS[num // 1000] + \
            Solution.HUNDREDS[num % 1000 // 100] + \
            Solution.TENS[num % 100 // 10] + \
            Solution.ONES[num % 10]
数字thousandshundredstensones
0----
1MCXI
2MMCCXXII
3MMMCCCXXXIII
4-CDXLIV
5-DLV
6-DCLXVI
7-DCCLXXVII
8-DCCCLXXXVIII
9-CMXCIX

洲际酒店往事

值得一提的是,在评论区中看到了和我在考场上类似的解法,只不过我稍微优化了一下,这居然也过了…

class Solution:
    def intToRoman(self, num: int) -> str:
        s = ""
        while num > 0:
            if num >= 1000:
                s += "M"
                num -= 1000
            elif num >= 900:
                s += "CM"
                num -= 900
            elif num >= 500:
                s += "D"
                num -= 500
            elif num >= 400:
                s += "CD"
                num -= 400
            elif num >= 100:
                s += "C"
                num -= 100
            elif num >= 90:
                s += "XC"
                num -= 90
            elif num >= 50:
                s += "L"
                num -= 50
            elif num >= 40:
                s += "XL"
                num -= 40
            elif num >= 10:
                s += "X"
                num -= 10
            elif num >= 9:
                s += "IX"
                num -= 9
            elif num >= 5:
                s += "V"
                num -= 5
            elif num >= 4:
                s += "IV"
                num -= 4
            elif num >= 1:
                s += "I"
                num -= 1
        return s

Edit page
Share this post on:

Next Post
Leetcode1: 两数之和