题目大意:罗马符号转化为数字

Roman numerals are represented by seven different symbols: IVXLCD 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.

Example 1:

Input: "III"
Output: 3

Example 2:

Input: "IV"
Output: 4

Example 3:

Input: "IX"
Output: 9

Example 4:

Input: "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.

Example 5:

Input: "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

罗马数转化成数字问题,我们需要对于罗马数字很熟悉才能完成转换。以下截自百度百科:

罗马数字是最早的数字表示方式,比阿拉伯数字早2000多年,起源于罗马。

如今我们最常见的罗马数字就是钟表的表盘符号:Ⅰ,Ⅱ,Ⅲ,Ⅳ(IIII),Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ……

对应阿拉伯数字(就是现在国际通用的数字),就是1,2,3,4,5,6,7,8,9,10,11,12。(注:阿拉伯数字其实是古代印度人发明的,后来由阿拉伯人传入欧洲,被欧洲人误称为阿拉伯数字。)

基本字符

I

V

X

L

C

D

M

相应的阿拉伯数字表示为

1

5

10

50

100

500

1000

1、相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;

2、小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;

3、小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;

4、正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)

5、在一个数的上面画一条横线,表示这个数扩大1000倍。

有几条须注意掌握:

1、基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。

2、不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。

3、V 和X 左边的小数字只能用Ⅰ。

4、L 和C 左边的小数字只能用X。

5、D 和M 左边的小数字只能用C。

而这道题好就好在没有让我们来验证输入字符串是不是罗马数字,这样省掉不少功夫。我们需要用到HashMap数据结构,来将罗马数字的字母转化为对应的整数值,因为输入的一定是罗马数字,那么我们只要考虑两种情况即可:

第一,如果当前数字是最后一个数字,或者之后的数字比它小的话,则加上当前数字。

第二,其他情况则减去这个数字。

class Solution {public int romanToInt(String s) {Map<Character, Integer> map = new HashMap<>();map.put('I', 1);map.put('V', 5);map.put('X', 10);map.put('L', 50);map.put('C', 100);map.put('D', 500);map.put('M', 1000);int res = 0;int preNum = 0;int length = s.length();for (int i = length - 1; i >= 0; i--){char key = s.charAt(i);int value = map.get(key);if (value >= preNum){res += value;}else {res -= value;}preNum = value;}return res;}
}

LeetCode 13 罗马符号转化为数字(难度: Easy)相关推荐

  1. LeetCode 12 数字转化为罗马符号(难度: Medium)

    题目大意:数字转化为罗马符号 Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Sy ...

  2. 【LeetCode】第374题——猜数字大小(难度:简单)

    [LeetCode]第374题--猜数字大小(难度:简单) 题目描述 解题思路 代码详解 注意点 题目描述 猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪 ...

  3. c语言罗马数字换成整数,leetcode 13 罗马数字转整数 C语言

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

  4. Leetcode 13.罗马数字转整数

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

  5. LeetCode 13. Roman to Integer

    问题链接 LeetCode 13. Roman to Integer 题目解析 将罗马数字转换成普通数字. 解题思路 先简单了解一下什么是罗马数字. 基本字符:I,V,X,L,C,D,M 相应的阿拉伯 ...

  6. excel使用教程_汉字资料如何进行数据分析?Excel中医学汉字资料转化为数字资料视频教程——If/Iserror/Find函数的结合使用...

    杏花开医学统计 医学统计教程,统计分析服务 关 注 Excel中医学汉字资料 如何转化为数字资料 关键词:Excel 我们平时使用Excel记录的绝大多数的医学资料是以汉字形式记录的.以汉字形式记录的 ...

  7. Python LeetCode(13.罗马数字转整数)

    Python LeetCode(13.罗马数字转整数) 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M ...

  8. 1-3 MATLAB符号变量的使用、符号变量转为匿名函数、向量值匿名函数、符号变量转为向量值函数、结构体批量提取数据

    1-3 MATLAB符号变量的使用.符号变量转为匿名函数.向量值匿名函数.符号变量转为向量值函数.结构体批量提取数据 文章目录 1-3 MATLAB符号变量的使用.符号变量转为匿名函数.向量值匿名函数 ...

  9. Leetcode 第1342题:将数字变成 0 的操作次数 (位运算解题法详解)

    前言 Leetcode第1342题如果用直观方式来做,其实是一道难度极低的题目.但是如果采用位运算的方式来解,则会涉及许多有趣的衍生知识点,了解其背后的原理对我们认识位运算有很大的帮助.现在,就让我们 ...

最新文章

  1. 第5章 用户身份与文件权限
  2. Linux Kernel TCP/IP Stack — L1 Layer — 多队列网卡
  3. HtmlUnit解析动态网页并采集网页列表到Excel
  4. 第一次scrum冲刺
  5. u-boot-2011.06-rc2移植到mini2440开发板(一)
  6. 适用于MongoDB和Mongometer的SpiderMonkey至V8
  7. uva 242——Stamps and Envelope Size
  8. matplotlib布局_Matplotlib多列,行跨度布局
  9. Snabbdom(虚拟dom)
  10. Bootstrap 下拉菜单事件
  11. 十个值得一试的开源深度学习框架
  12. 机载激光雷达原理与应用科普(一)
  13. A. 运维体系 --- SLA理论体系
  14. c语言输入12行怎么输入,c语言中,定义什么型别的变数能同时储存数字跟字元,怎么输入...
  15. Mysql分页Limt
  16. SQL 给时间字段增加一固定时间
  17. 一周肝出Linux之远程服务详解(ssh远程登录、scp远程复制、sftp安全下载、TCP Wrappers访问控制)
  18. C 语言中负数移位运算讲解
  19. JAVA小项目(四)—— 贪吃蛇【轻松入门,附源码】
  20. 简历之精通 熟练 掌握 熟悉 了解

热门文章

  1. 组合数(字典序排列)
  2. 油气田工业控制系统现状
  3. 适用于DSP的四阶矩阵求逆算法
  4. 网站的文章怎么才能让百度等搜索引擎快速收录?
  5. 小猿圈python之python期末考试测试题(二)_小猿圈Python开发面试题(二)
  6. 第八章 字符串和字符串函数
  7. python抠图太模糊,讲实话,我会Python之后!我都不屑用PS了!Python抠图太方便了!...
  8. 用Python编写账号密码登录程序
  9. 目前最新android处理器排行榜,2016上半年安卓手机处理器排行:骁龙820无意外夺冠...
  10. 苹果新款笔记本_苹果自研CPU最快下月杀到 搭配史上最便宜Mac笔记本(全文)_苹果 新款MacBook Pro 13英寸_笔记本新闻...