python罗马数字转整数

python罗马数字转整数,第1张

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)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5572008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存