[LeetCode] Roman to Integer

题意

给出一个罗马数字,将它转成十进制数字。

范围是 1~3999。

题解

一点坑都没有。

关于罗马数字的介绍看 维基 就好了。

只需要记得 “左减右加” 原则就好了。

代码

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

结果

3999 / 3999 test cases passed.
Status: Accepted
Runtime: 232 ms
Your runtime beats 7.27% of pythonsubmissions.

就是速度有点慢。

桩程序

if __name__ == '__main__':
    cases = [
        {'ans': 1, 'num': 'I'},
        {'ans': 8, 'num': 'VIII'},
        {'ans': 14, 'num': 'XIV'},
        {'ans': 15, 'num': 'XV'},
        {'ans': 16, 'num': 'XVI'},
        {'ans': 199, 'num': 'CXCIX'},
        {'ans': 3978, 'num': 'MMMCMLXXVIII'},
    ]
    for item in cases:
        ans = (Solution()).romanToInt(s=item['num'])
        print(str(ans == item['ans']) + "\t=>" + str(ans) + ":" + str(item['ans']))

留下评论