[LeetCode][Python]12. Integer to Roman

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

罗马数字的表示:
I - 1
V - 5
X - 10
L - 50
C - 100
D - 500
M - 1000

罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法:

  1. 相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
  2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
  3. 小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;

思路:

  1. 题目要求最大输入值是3999,首先要得到罗马字母千位,百位,十位,个位的各个表达,然后用/和%号得到各位数的值,比如几个千位,几个百位,几个十位和几个个位。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
class Solution(object):
    def intToRoman(self, num):
        """
        :type num: int
        :rtype: str
        """
        roman = [["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"],
                 ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"],
                 ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"], ["", "M", "MM", "MMM"]]
        res = []
        res.append(roman[3][num / 1000 % 10])
        res.append(roman[2][num / 100 % 10])
        res.append(roman[1][num / 10 % 10])
        res.append(roman[0][num % 10])
        return "".join(res)


if __name__ == '__main__':
    sol = Solution()
    num = 3999
    print sol.intToRoman(num)
    print sol.intToRoman(1980)
    原文作者:bluescorpio
    原文地址: https://www.jianshu.com/p/15e5ce748c54
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞