问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3842 访问。

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值

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。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。

X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 

C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

输入: "III"

输出: 3

输入: "IV"

输出: 4

输入: "IX"

输出: 9

输入: "LVIII"

输出: 58

解释: L = 50, V= 5, III = 3.

输入: "MCMXCIV"

输出: 1994

解释: M = 1000, CM = 900, XC = 90, IV = 4.


Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

Symbol       Value

I             1

V             5

X             10

L             50

C             100

D             500

M             1000

For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:

I can be placed before V (5) and X (10) to make 4 and 9. 

X can be placed before L (50) and C (100) to make 40 and 90. 

C can be placed before D (500) and M (1000) to make 400 and 900.

Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.

Input: "III"

Output: 3

Input: "IV"

Output: 4

Input: "IX"

Output: 9

Input: "LVIII"

Output: 58

Explanation: C = 100, L = 50, XXX = 30 and III = 3.

Input: "MCMXCIV"

Output: 1994

Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3842 访问。

public class Program {

    public static void Main(string[] args) {
var s = "MCMXCIV"; var res = RomanToInt(s);
Console.WriteLine(res); s = "LVIII"; res = RomanToInt2(s);
Console.WriteLine(res); Console.ReadKey();
} private static Dictionary<char, int> _dic = new Dictionary<char, int> {
{'I',1},
{'V',5},
{'X',10},
{'L',50},
{'C',100},
{'D',500},
{'M',1000},
{'a',4},
{'b',9},
{'c',40},
{'d',90},
{'e',400},
{'f',900},
}; private static int RomanToInt(string s) {
var res = 0;
s = s.Replace("IV", "a")
.Replace("IX", "b")
.Replace("XL", "c")
.Replace("XC", "d")
.Replace("CD", "e")
.Replace("CM", "f");
for(var i = 0; i < s.Length; i++) {
res += _dic[s[i]];
}
return res;
} private static Dictionary<char, int> _dic2 = new Dictionary<char, int> {
{'I',1},
{'V',5},
{'X',10},
{'L',50},
{'C',100},
{'D',500},
{'M',1000},
}; private static int RomanToInt2(string s) {
var res = 0;
for(var i = 0; i < s.Length; i++) {
if(i == s.Length - 1 || _dic2[s[i + 1]] <= _dic2[s[i]]) {
res += _dic2[s[i]];
} else {
//右边比左边大要减
res -= _dic2[s[i]];
}
}
return res;
} }

以上给出2种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3842 访问。

1994
58

分析:

显而易见,以上2种算法的时间复杂度均为:  。

C#LeetCode刷题之#13-罗马数字转整数(Roman to Integer)的更多相关文章

  1. LeetCode 13. 罗马数字转整数(Roman to Integer)

    13. 罗马数字转整数 13. Roman to Integer 题目描述 罗马数字包含以下七种字符: I,V,X,L,C,D 和 M. 字符        数值  I           1  V  ...

  2. 罗马数字转整数 · Roman to Integer

    13. Roman to Integer [抄题]: [暴力解法]: 时间分析: 空间分析: [思维问题]: 没有想到罗马字是逆序的情况 没有想到要先用toCharArray()方法把字符串拆成一个字 ...

  3. 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  ...

  4. Leetcode题库——13.罗马数字转整数

    @author: ZZQ @software: PyCharm @file: Luoma2Int.py @time: 2018/9/16 17:06 要求: 罗马数字转数字 字符 数值 I 1 V 5 ...

  5. leetcode刷题笔记08 字符串转整数 (atoi)

    题目描述 实现 atoi,将字符串转为整数. 在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即 ...

  6. 【leetcode算法-简单】13. 罗马数字转整数

    [题目描述] 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列 ...

  7. [Swift]LeetCode13. 罗马数字转整数 | Roman to Integer

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

  8. C#LeetCode刷题-字符串

    字符串篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串   24.6% 中等 5 最长回文子串   22.4% 中等 6 Z字形变换   35.8% 中等 8 字符串转整数 (atoi)   ...

  9. C#LeetCode刷题-数学

    数学篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 7 反转整数 C#LeetCode刷题之#7-反转整数(Reverse Integer) 28.6% 简单 8 字符串转整数 ...

  10. leetcode刷题目录

    leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ...

随机推荐

  1. Disease Manangement 疾病管理

    题目描述 Alas! \(A\) set of \(D (1 <= D <= 15)\) diseases (numbered \(1..D\)) is rshning through t ...

  2. 通过Vue实现的todolist

    和接口对接的todolist因为有后台的存在,todolist获取的数据会一直存在不丢失(不管你如何刷新页面),思路如下: 首先得先搞到接口: 通过这个接口地址可以获取整段的数据,成功err为0. 于 ...

  3. JELLY技术周刊 Vol.15 云游戏会是 5G 杀手级应用么?

    蒲公英 · JELLY技术周刊 Vol.15 听到"云游戏",或许我们的第一反应会是"云玩家"而不是那些上云的"游戏",在这个 5G 已来的 ...

  4. Python 写入excel时的字体格式设置

    转自:https://blog.csdn.net/kuangzhi9124/article/details/81940919 下面代码设置了单元格的字体.位置居中.框线,可以将格式调成自己需要的 im ...

  5. python(xlsxwriter模块使用)

    XlsxWriter简介XlsxWriter是一个Python模块,可用于在Excel 2007+ XLSX文件中写入多个工作表的文本,数字,公式和超链接.它支持格式化等功能.可到官网了解更多详情,官 ...

  6. 如何使用Excel管理项目?

    1.什么是复杂问题? 复杂问题需要很多道工序,涉及到与多个人进行沟通,人的注意力没法持续关注,导致很容易忘掉很多重要步骤.像这种问题就要用到项目管理工具,在重要的节点上,来检查自己是否遗漏了重要的环节 ...

  7. 图解HTTP 6/11

    第三章 HTTP报文内的HTTP信息 1.用于http协议交互的信息被称为HTTP报文.请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端 )的叫做响应报文. 2.请求报文的结构 请求行:包 ...

  8. Kylin Flink Cube 引擎的前世今生

    Apache Kylin™ 是一个开源的.分布式的分析型数据仓库,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,它能在亚秒内查询巨大的表. Ky ...

  9. Python os.pipe() 方法

    概述 os.pipe() 方法用于创建一个管道, 返回一对文件描述符(r, w) 分别为读和写.高佣联盟 www.cgewang.com 语法 pipe()方法语法格式如下: os.pipe() 参数 ...

  10. Python File isatty() 方法

    概述 isatty() 方法检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False.高佣联盟 www.cgewang.com 语法 isatty() 方法语法如下: fileObj ...