Q13 Roman to Integer

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

解题思路:

将罗马字符保存到map中,观察罗马字符的规律,编写代码。

Python实现:
class Solution:
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        map = { 'I' : 1, 'V' : 5, 'X' : 10, 'L' : 50, 'C' : 100, 'D' : 500, 'M' : 1000 }
        ans = 0
        if len(s) == 1:
            return map.get(s[0])
        for i in range(len(s) - 1):
            ch = map.get(s[i])
            if (ch >= map.get(s[i+1])):
                ans += ch
            else:
                ans -= ch
        ans += map.get(s[-1])  # 加上最后一个数字
        return ans

a = 'DCXXI'
b = Solution()
print(b.romanToInt(a))  # 621

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Leetcode【368、986】

    最大可除子集。给一个包含不同数字的数组,找一个最大的子集,对于子集中的每个元素对 (Si, Sj) 满足 Si % Sj = 0 或者 Sj % Si = 0,...

    echobingo
  • Leetcode 【49、539、709、833、916】

    利用字典数组。可以对数组中的每个字符串排序,将排序结果作为键,原字符串作为值。如 { "aet": ["eat","aet","tea"] }。最后字典中所有的...

    echobingo
  • Leetcode【817、876、1019】

    直接将数组转化为集合,然后遍历一次链表。令 ans = 0,flag = True:

    echobingo
  • poj 1455 Crazy tea party

      这道题第一眼看去很难,其实不然,短短几行代码就搞定了。   说一下大概思路,如果是排成一排的n个人,如 1 2 3 4 5 6 7 8 我们要变成 8 7...

    xindoo
  • LeetCode 1363. 形成三的最大倍数(贪心,难)

    给你一个整数数组 digits,你可以通过按任意顺序连接其中某些数字来形成 3 的倍数,请你返回所能得到的最大的 3 的倍数。

    Michael阿明
  • 【USACO 3.2】Factorials(阶层非零尾数)

    题解:可以把5和2的个数算出来,每次把5和2都除掉,最后乘上比5多出来的2。我的解法是,每次把尾巴的0去掉,并且保留3位,算到最后取尾数就可以了。、

    饶文津
  • 【HDU 2160】母猪的故事

    话说现在猪肉价格这么贵,著名的ACBoy 0068 也开始了养猪生活。说来也奇怪,他养的猪一出生第二天开始就能每天中午生一只小猪,而且生下来的竟然都是母猪。  ...

    饶文津
  • 反片语(Ananagrams , UVa 156)

    输入一些单词,找出所有满足如下条件的单词: 该单词不能通过字母重排,得到输入文本中的另一个单词。

    Vincent-yuan
  • poj 1503 高精度加法

    先看我Java代码,用BigINteger类很多东西都不需要考虑,比如前导0什么的,很方便。不过java效率低点,平均用时600ms,C/C++可以0ms过。

    xindoo
  • 全球首个获FDA认定治疗NASH的药物将于下半年申请上市!

    近日,生物制药公司Intercept Pharma计划于今年下半年在美国和欧洲提交obeticholic acid(奥贝胆酸,OCA)的上市申请文件。这款药物是...

    镁客网

扫码关注云+社区

领取腾讯云代金券