罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
给定一个罗马数字,将其转换成整数。
"""
法一:采用dict字典模式
class Solution: def romanToInt(self, s: str) -> int: dicts = { 'I' : 1, 'V' : 5, 'X' : 10, 'L' : 50, 'C' : 100, 'D' : 500, 'M' : 1000, 'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900 } special = ['IV','IX','XL','XC','CD','CM'] result = [] sums = 0 i = 0 while i < len(s): if s[i:i+2] in special: result.append(s[i:i+2]) i += 2 else: result.append(s[i]) i += 1 for j in range(len(result)): sums += dicts[result[j]] return sums s = "IV" S = Solution() result = S.romanToInt(s) print(result)法二:小的数字在大的数字的左边的情况,根据规则需要减去小的数字
通常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。
例如 XXVII 可视作 X+X+V+I+I=10+10+5+1+1=27。
若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。
例如 XIV 可视作 X−I+V=10−1+5=14。
class Solution: SYMBOL_VALUES = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000, } def romanToInt(self, s: str) -> int: ans = 0 n = len(s) for i, ch in enumerate(s):# list(enumerate(s))=[(0,'I'),(1,'V')] value = self.SYMBOL_VALUES[ch]#或者 Solution.SYMBOL_VALUES[ch] if i < n - 1 and value < self.SYMBOL_VALUES[s[i + 1]]: ans -= value else: ans += value return ans s = "IV" S = Solution() result = S.romanToInt(s) print(result)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)