今天刷的题是关于字符串的,一个是罗马数字转整数,一个是整数转罗马数字,整体思路很类似。
1.罗马数字转整数
题目

示例

提示:

解题思路
就是将字符串中的字符映射成不同的值,最简单粗暴的方式就是遍历字符串,用case 或者if来判断读入的每个字符,注意一下几个特例;不过可以用一个map来表示字符和数值之间的映射关系,然后在读入的时候,通过字符来获取对应的value,对于特例,题目里也说了是数字小的在数字大的左边,循环的时候用注意判断一下,代码如下:
class Solution:
def romanToInt(self, s: str) -> int:
lens = len(s)
num = 0
CharToNum = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
for i in range(lens):
if i < (lens -1) and CharToNum[s[i]] < CharToNum[s[i+1]]:
num -= CharToNum[s[i]] #特例
else:
num += CharToNum[s[i]]
return num
2.整数转罗马数字
题目

示例

解题思路
和上一题反过来,需要有序地查看数字中有几个1000,500,不能用按照上述字典那样建立无序的对应map,可以用两个list分布保存除数和对应的字符,然后不断地循环,注意每次都要更新num
class Solution:
def intToRoman(self, num: int) -> str:
s = ''
n = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5,4, 1]
c = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL' ,'X', 'IX', 'V', 'IV', 'I']
for i in range(len(n)):
m = num // n[i]
s += m * c[i]
num = num - m * n[i]
return s
文章转载自每日一Python,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




