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) #判断完成后,返回字符串变量
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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'
- 第三:只需获取每个进制的数值,并转换为特定列表中的元素即可求解