栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python罗马数字转整数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python罗马数字转整数

题目: """
罗马数字包含以下七种字符: 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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/580789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号