博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
13.罗马数字转整数
阅读量:6643 次
发布时间:2019-06-25

本文共 1795 字,大约阅读时间需要 5 分钟。

题目:

罗马数字包含以下七种字符: IVXLCDM

字符          数值I             1V             5X             10L             50C             100D             500M             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 的范围内。

示例 1:

输入: "III"输出: 3

示例 2:

输入: "IV"输出: 4

示例 3:

输入: "IX"输出: 9

示例 4:

输入: "LVIII"输出: 58解释: L = 50, V= 5, III = 3.

示例 5:

输入: "MCMXCIV"输出: 1994解释: M = 1000, CM = 900, XC = 90, IV = 4.

解答:

直觉解法:

类似与编译原理里面的状态机,对词法进行识别:

public class Solution {    public int RomanToInt(string s) {        if(s == null || s.Length == 0) return 0;        int result = 0;        for(int i = 0;i

另一种解法:

首先建立一个HashMap来映射符号和值,然后对字符串从左到右遍历,如果当前字符代表的值不小于其右边,就加上该值;否则就减去该值。以此类推到最左边的数,最终得到的结果即是答案。

public class Solution {    public int RomanToInt(string s) {        Dictionary
roman = new Dictionary
{ { 'I', 1 }, { 'V', 5 }, { 'X', 10 }, { 'L', 50 }, { 'C', 100 }, { 'D', 500 }, { 'M', 1000 } }; int result = roman[s[s.Length - 1]]; char preChar = s[s.Length - 1]; for (int i = s.Length - 2; i >= 0; i--) { if (roman[s[i]] >= roman[preChar]) { result += roman[s[i]]; } else { result -= roman[s[i]]; } preChar = s[i]; } return result; }}

转载于:https://www.cnblogs.com/zhang-mo/p/10860693.html

你可能感兴趣的文章
光照模型与面绘制算法---OpenGL光照和表面绘制函数
查看>>
系统文件的损坏导致Windows XP连续重启的解决方案
查看>>
北京点击科技有限公司董事长兼总裁——王志东经典语录5
查看>>
Linux误删home目录下的用户目录恢复
查看>>
JavaScript中的函数是数据
查看>>
Linux 内核配置选项
查看>>
基于VMWare Workstation 10的VMware ESXi5.5部署和配置
查看>>
学习linux—— 文件目录的管理
查看>>
信息安全比赛混淆flag脚本
查看>>
常用Python机器学习库有哪些?
查看>>
理解VueJs模板
查看>>
百度i账户荣膺2018全球物联网大会最佳创新合作伙伴奖
查看>>
使用函数计算对表格存储中数据做简单清洗
查看>>
java install
查看>>
将excel中的数据导入到oracle数据库中
查看>>
搭建安装oracle数据库
查看>>
下划线按钮
查看>>
部署Windows Server 2016基于工作组的集群
查看>>
CSS 定义的四种方法
查看>>
Counting Stars
查看>>