Leetcode题库——13.罗马数字转整数
@author: ZZQ
@software: PyCharm
@file: Luoma2Int.py
@time: 2018/9/16 17:06
要求: 罗马数字转数字
字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。
27 写做  XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,
例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。
同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
1) I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
2) X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
3) C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
思路: 每次先将当前罗马数字表示的数值加上,然后判断后面跟的是不是六种特殊情况之一,如果是,则减去二倍的当前罗马数字表示的数值。
class Solution():
    def __init__(self):
        pass
    def str2int(self, n):
        if n == 'I':
            return 1
        if n == 'V':
            return 5
        if n == 'X':
            return 10
        if n == 'L':
            return 50
        if n == 'C':
            return 100
        if n == 'D':
            return 500
        if n == 'M':
            return 1000
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        roman_len = len(s)
        value = 0
        currstr = ''
        for i in range(0, roman_len):
            value += self.str2int(s[i])
            if currstr == 'I' and s[i] == 'V':
                value += - 2 * self.str2int(currstr)
            if currstr == 'I' and s[i] == 'X':
                value += - 2 * self.str2int(currstr)
            if currstr == 'X' and s[i] == 'L':
                value += - 2 * self.str2int(currstr)
            if currstr == 'X' and s[i] == 'C':
                value += - 2 * self.str2int(currstr)
            if currstr == 'C' and s[i] == 'D':
                value += - 2 * self.str2int(currstr)
            if currstr == 'C' and s[i] == 'M':
                value += - 2 * self.str2int(currstr)
            currstr = s[i]
        return value
if __name__ == "__main__":
    x = "IX"
    answer = Solution()
    print answer.romanToInt(x)
Leetcode题库——13.罗马数字转整数的更多相关文章
- LeetCode题库13. 罗马数字转整数(c++实现)
		问题描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ... 
- Leetcode题库——8.字符串转为整数【##】
		@author: ZZQ @software: PyCharm @file: myAtoi.py @time: 2018/9/20 20:54 要求:实现 atoi,将字符串转为整数. 1)根据需要丢 ... 
- C#版 - Leetcode 13. 罗马数字转整数 - 题解
		C#版 - Leetcode 13. 罗马数字转整数 - 题解 Leetcode 13. Roman to Integer 在线提交: https://leetcode.com/problems/ro ... 
- LeetCode 13. 罗马数字转整数(Roman to Integer)
		13. 罗马数字转整数 13. Roman to Integer 题目描述 罗马数字包含以下七种字符: I,V,X,L,C,D 和 M. 字符 数值 I 1 V ... 
- Java实现 LeetCode 13 罗马数字转整数
		13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 ... 
- leetcode 13. 罗马数字转整数 及 12. 整数转罗马数字
		13. 罗马数字转整数 问题描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如,罗马数 ... 
- 13. 罗马数字转整数----LeetCode
		13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 ... 
- leetcode算法13.罗马数字转整数
		哈喽!大家好,我是[学无止境小奇],一位热爱分享各种技术的博主! [学无止境小奇]的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过. [学无止 ... 
- leetcode题库
		leetcode题库 #题名题解通过率难度出现频率 1 两数之和 46.5%简单2 两数相加 35.5%中等3 无重复字符的最长子串 31.1%中等4 寻找两个有序数组的中位 ... 
随机推荐
- JS基础-组成
			类型 前缀 类型 实例 数组 a Array aItems 布尔值 b Boolean bIsComplete 浮点数 f Float fPrice 函数 fn Function fnHandler ... 
- SMARTFORMS关闭失败
			用户要调整表单样式,结果调整完发现打印时报错. 检查表单后发现,是因为用户要求删除表单中的一个单元格,但是删除TEMPLATE中的一个格子后,忘了调整后续单元格内容输出的位置.导致输出错误. 
- awk练习笔记
			题目数据如下: Mike Harrington:(510) 548-1278:250:100:175 Christian Dobbins:(408) 538-2358:155:90:201Susan ... 
- 数据增强利器--Augmentor
			最近遇到数据样本数目不足的问题,自己写的增强工具生成数目还是不够,终于在网上找到一个数据增强工具包,足够高级,足够傻瓜.想要多少就有多少!再也不怕数据不够了! 简介 Augmentor是一个Pytho ... 
- 传输层tcp协议以及scoket套字节方法
			一.传输层 1.传输层的由来: 网络层的IP帮我们区分子网 以太网的Mac帮我们找到主机 所以通过IP和Mac找到了一台特定的主机 如何找到该特定主机的应用程序呢? 答案是通过端口,端口即应用程序与网 ... 
- HTML5上的LocalStorage基本用法
			1.获取localStorage的长度:window.localStorage.length 2.添加/编辑localStorage的内容:window.localStorage.setItem(键, ... 
- 使用efwplusScript开发Winform程序【像小程序那样开发PC软件】
			一.前言 本人从事多年医疗管理软件的开发,在医院大多数的软件都还是CS程序,BS程序很少,对于使用者来说CS的操作体验确实比BS的要好. 1.CS的缺点就是升级麻烦,每次有新版本都需要所有客户端操作升 ... 
- Docker创建数据卷容器
			docker create --name test_4 -v /data_4 nginx创建一个test_4数据卷容器,在该容器的/data_4目录挂载数据卷 使用数据卷容器时,无须保证数据卷容器处于 ... 
- python魔法方法大全
			1.python魔法方法详解: python魔法方法是可以修改重载的,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而 ... 
- Android #Android开发环境搭建
			Android #Android开发环境搭建 1.下载:Google在国服的官网 https://developer.android.google.cn/index.html 1.点击首页 “ 获取 ... 
