[LeetCode][Python]12. Integer to Roman

1702 ワード

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

ローマ数字は7つのローマ字を数字、すなわちI(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)として用いる.記数の方法:
  • 同じ数字が連写され、表す数はこれらの数字が加算された数に等しく、例えばIII=3である.
  • 小さい数字は大きい数字の右側にあり、表す数はこれらの数字を加算した数に等しく、例えばVIII=8、IX=12である.
  • の小さい数字(I、X、Cに限る)は大きい数字の左側にあり、表す数は大きい数から小数を減らした数に等しい.例えばIV=4、IX=9;
  • 考え方:
  • タイトルの最大入力値は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)