问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 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. 罗马数字 java_【leetcode刷题】[简单]13.罗马数字转整数(roman to integer)-java

    罗马数字转整数 roman to integer 题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M ...

  2. LeetCode刷题13-简单-罗马数字转整数

    文章目录 前言 一.题目描述 二.题目解析 三.代码 结语 前言 算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题! 第一遍,不求最优解,但求能过!!!

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

    题目描述 给定一个罗马数字,将其转换成整数. 返回的结果要求在 1 到 3999 的范围内. 解题思路 public int romanToInt(String s) {if (s == null | ...

  4. LeetCode刷题记录13——705. Design HashSet(easy)

    LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...

  5. ​LeetCode刷题实战371:两整数之和

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

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

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

  7. leetcode算法刷题记录之罗马数字转整数

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

  8. Leecode刷题热题HOT100(13)——罗马数字转整数

  9. LeetCode刷题(13)

    Plus One 在一个有数列表示的数的基础上加一 class Solution(object):def plusOne(self, digits):""":type d ...

  10. JAVA怎么将整数反转_【leetcode刷题】[简单]7.反转整数(reverse integer)-java

    反转整数 reverse integer 题目 给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 ...

最新文章

  1. platform设备驱动全透析
  2. 4000+系统,10w+服务的立体式监控是如何炼成的?
  3. 泰信通获得正唐资本首轮投资,加速进军SDN、云网市场
  4. Service Mesh服务网格:是什么和为什么
  5. C语言之字符数组在if{}里面赋值给char *引发的问题
  6. CocoaPods pod install
  7. SVN服务器使用(一)
  8. spring 常用注解以分类
  9. jQuery-可收缩面板
  10. Linux运维日常命令
  11. SSM框架原理,作用及使用方法,详细解释
  12. 简单的php表单制作
  13. Win10指定用户访问共享文件及“无法访问。你可能没有权限使用网络资源。”问题解决
  14. 德雷塞尔大学计算机科学专业,美国大学计算机科学专业排名如何
  15. python的dispatch_win32com.client.Dispatch()函数用法
  16. 完美解决浏览器主页被hao123劫持,打开浏览器时自动进入hao123主页怎么办
  17. BTC地址不同格式的区别
  18. 计算机的人分类,计算机的分类
  19. 钢琴软件c语言源代码,C语言钢琴程序代码.doc
  20. JSP-----------简易购物车代码

热门文章

  1. 测试服务器IO和网速的脚本
  2. OpenVR——驱动接口之IServerTrackedDeviceProvider简介
  3. LeetCode 581. Shortest Unsorted Continuous Subarray
  4. 动态数组相关操作 0104 ArrayList
  5. 例子 类的定义与对象的创建 狗的例子
  6. CF1182E Product Oriented Recurrence
  7. The setting logImpl is not known
  8. PCB中英对照一、 综合词汇
  9. 连载13:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...
  10. 限制使用su命令的用户与使用sudo机制提升权限