【leetcode】13. 罗马数字转整数(python)

【leetcode】13. 罗马数字转整数(python)_第1张图片
【leetcode】13. 罗马数字转整数(python)_第2张图片

方法一:对特殊情况直接写条件筛选

class Solution:
    def romanToInt(self, s: str) -> int:
        dic = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M':1000}
        res = 0
        n = len(s) - 1
        for i in range(n, -1, -1): # 前闭后开
            if i == n:
                res += dic[s[i]]
            elif (s[i] == 'I' and s[i + 1] in ['V', 'X']) or \
                (s[i] == 'X' and s[i + 1] in ['L', 'C'] ) or \
                (s[i] == 'C' and s[i + 1] in ['D', 'M']):
                res -= dic[s[i]]
            else:                
                res += dic[s[i]]
            # print(s[i], res)
        return res

方法二:模拟

若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。

class Solution:
    def romanToInt(self, s: str) -> int:
        dic = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M':1000}
        res = 0
        for i in range(len(s) - 1):
            if dic[s[i]] < dic[s[i + 1]]:
                res -= dic[s[i]]
            else:
                res += dic[s[i]]
        res += dic[s[-1]]
        return res

你可能感兴趣的:(Python,Leetcode,python,字符串)