Leetcode_12【整数转罗马数字】

文章目录:

  • 题目
  • 脚本一及注释
  • 脚本一逻辑

题目:

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符   数值
I     1
V    5
X   10
L    50
C   100
D   500
M    1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

示例 1:

输入: 3
输出: "III"
示例 2:

输入: 4
输出: "IV"
示例 3:

输入: 9
输出: "IX"
示例 4:

输入: 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
示例 5:

输入: 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.


脚本一及注释:【用时:48ms】

class Solution:
    def intToRoman(self, num: int) -> str:      #题目定义输出及输出,输入为整型,且名为num的变量,输出为字符串型变量
        num1 = num % 1000                #数值取余
        count1 = int(num / 1000)            #获取输入数值包含多少个1000
        num2 = num1 % 100                #数值再取余
        count2 = int(num1 / 100)            #获取取余后的数值包含多少个100
        num3 = num2 % 10                 #数值再取余
        count3 = int(num2 / 10)             #获取取余后的数值包含多少个10
        list1 = ['M','MM','MMM']            #定义列表
        list2 = ['C','CC','CCC','CD','D','DC','DCC','DCCC','CM']  #定义列表
        list3 = ['X','XX','XXX','XL','L','LX','LXX','LXXX','XC'] #定义列表
        list4 = ['I','II','III','IV','V','VI','VII','VIII','IX'] #定义列表
        str = ""                        #定义空字符串
        if count1 != 0:                    #判断包含1000的个数是否为零,若不为零则进入判断语句
            str = str + list1[count1 - 1]         #根据变量值,将空字符串加上列表某个元素 
        if count2 != 0:                    #判断包含100的个数是否为零,若不为零则进入判断语句
            str = str + list2[count2 - 1]         #根据变量值,将字符串加上列表中某个元素
        if count3 != 0:                    #同上
            str = str + list3[count3 - 1]          #同上
        if num3 != 0:                      #同上
            str = str + list4[num3 -1]            #同上
        return(str)                        #判断完成后,返回字符串变量
class Solution:
    def intToRoman(self, num: int) -> str:
        num1 = num % 1000
        count1 = int(num / 1000)
        num2 = num1 % 100
        count2 = int(num1 / 100)
        num3 = num2 % 10
        count3 = int(num2 / 10)
        list1 = ['M','MM','MMM']
        list2 = ['C','CC','CCC','CD','D','DC','DCC','DCCC','CM']
        list3 = ['X','XX','XXX','XL','L','LX','LXX','LXXX','XC']
        list4 = ['I','II','III','IV','V','VI','VII','VIII','IX']
        str = ""
        if count1 != 0:
            str = str + list1[count1 - 1]
        if count2 != 0:
            str = str + list2[count2 - 1]
        if count3 != 0:
            str = str + list3[count3 - 1]
        if num3 != 0:
            str = str + list4[num3 -1]
        return(str)
未加注释代码

脚本一逻辑:

  • 第一:此题输入的值范围已知其只有四位数
  • 第二:这个转换,其实就是每个进制的数值对应特定的值,这是固定不变的,所以可用列表来固定进制中对应的罗马数字;比如十位数的1,2,3,4,5,6,7,8,9分别对应罗马数字的'X','XX','XXX','XL','L','LX','LXX','LXXX','XC'
  • 第三:只需获取每个进制的数值,并转换为特定列表中的元素即可求解

猜你喜欢

转载自www.cnblogs.com/mailong/p/12008439.html