美文网首页
leetcode(python) 13.罗马数字转整数

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

作者: 梦vctor | 来源:发表于2019-03-09 20:20 被阅读0次

    思路:通常情况下将罗马数字和整数相对应存到字典,然后遍历就可以解决。考虑到6种特殊情况,I、X、C可放置左右,那么设置判断条件,比较相邻罗马数字大小即可解决。

    class Solution:
        def romanToInt(self, s: str) -> int:
            r = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
            value = [1, 5, 10, 50, 100, 500, 1000]
            d = dict(zip(r, value))    #zip()打包为元组的列表
            print(d)
            result = 0
            for i in range(len(s)-1):
                if d[s[i]] < d[s[i + 1]]:  #若前面小,则减该数
                    result -= d[s[i]]
                elif d[s[i]] >= d[s[i + 1]]:
                    result += d[s[i]]
            result += d[s[-1]]
    
            return result
    

    提交后看到的最优解法:
    思路:6中特殊情况下,比如IV和VI的结果分别是4和6,结果相差2,也是I的两倍。同理,I、X、C在分别在左和在右的结果差都是该罗马数字的两倍。

            dic1 = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
            if not s:
                return (0)
            num = dic1[s[0]]
            previous = dic1[s[0]]
            for i in s[1:]:
                current = dic1[i]
                num += current
                if current > previous:
                    num = num - 2 * previous
                previous = current
            return (num)
    

    相关文章

      网友评论

          本文标题:leetcode(python) 13.罗马数字转整数

          本文链接:https://www.haomeiwen.com/subject/veuepqtx.html