Leetcodeleetcode

12. Integer to Roman

2017-10-26  本文已影响5人  ciantian

最近再刷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))
上一篇下一篇

猜你喜欢

热点阅读