zoukankan      html  css  js  c++  java
  • 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'
    • 第三:只需获取每个进制的数值,并转换为特定列表中的元素即可求解
  • 相关阅读:
    jquery实现选项卡(两句即可实现)
    常用特效积累
    jquery学习笔记
    idong常用js总结
    织梦添加幻灯片的方法
    LeetCode "Copy List with Random Pointer"
    LeetCode "Remove Nth Node From End of List"
    LeetCode "Sqrt(x)"
    LeetCode "Construct Binary Tree from Inorder and Postorder Traversal"
    LeetCode "Construct Binary Tree from Preorder and Inorder Traversal"
  • 原文地址:https://www.cnblogs.com/mailong/p/12008439.html
Copyright © 2011-2022 走看看