12. Integer to Roman

作者: ciantian | 来源:发表于2017-10-26 21:16 被阅读5次

    最近再刷leetcode,除了链表之外的都用python 实现,贴出一些代码,希望指正.

    问题描述:

    整数转罗马数字
    在没做这个题之前我想大家应该对罗马数字都没什么了解吧.
    I = 1;
    V = 5;
    X = 10;
    L = 50;
    C = 100;
    D = 500;
    M = 1000;
    其中每两个阶段的之间有一个减法的表示,比如900=CM, C写在M前面表示M-C。

    解题思想

    题中又说最大的是3999,那么对问题就有了很大的简化.
    最大的是4位数,那最简单的方案就是用四个list分别表示每个单位对应的值,然后用长度遍历即可.

    每个list的第一位是补位为了好计算,无意义.
    个位1--9   list1 = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
    十位10--90   list2 = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
    百位100--900   list3 = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
    千位1000--3000   list4 = ["", "M", "MM", "MMM"]
    

    代码实现

    class Solution(object):
        def intToRoman(self, num):
            """
            :type num: int
            :rtype: str
            """
            # 个位 十位 百位 千位
            list1 = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
            list2 = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
            list3 = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
            list4 = ["", "M", "MM", "MMM"]
            list_all = [list1, list2, list3, list4]
            length = len(str(num))
            if num == 0:
                return " "
            list_5 = []
            for i in range(length):
                tmp = num // pow(10, (length - 1 - i))
                num = num % pow(10, (length - 1 - i))
                list_5.append(list_all[length -1 - i][tmp])
            return ''.join(list_5)
    solution = Solution()
    print(solution.intToRoman(3999))
    

    相关文章

      网友评论

        本文标题:12. Integer to Roman

        本文链接:https://www.haomeiwen.com/subject/mtklpxtx.html