LeetCode 13 罗马符号转化为数字(难度: Easy)
题目大意:罗马符号转化为数字
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 beforeV
(5) andX
(10) to make 4 and 9.X
can be placed beforeL
(50) andC
(100) to make 40 and 90.C
can be placed beforeD
(500) andM
(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)相关推荐
- LeetCode 12 数字转化为罗马符号(难度: Medium)
题目大意:数字转化为罗马符号 Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Sy ...
- 【LeetCode】第374题——猜数字大小(难度:简单)
[LeetCode]第374题--猜数字大小(难度:简单) 题目描述 解题思路 代码详解 注意点 题目描述 猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪 ...
- 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 ...
- 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 ...
- LeetCode 13. Roman to Integer
问题链接 LeetCode 13. Roman to Integer 题目解析 将罗马数字转换成普通数字. 解题思路 先简单了解一下什么是罗马数字. 基本字符:I,V,X,L,C,D,M 相应的阿拉伯 ...
- excel使用教程_汉字资料如何进行数据分析?Excel中医学汉字资料转化为数字资料视频教程——If/Iserror/Find函数的结合使用...
杏花开医学统计 医学统计教程,统计分析服务 关 注 Excel中医学汉字资料 如何转化为数字资料 关键词:Excel 我们平时使用Excel记录的绝大多数的医学资料是以汉字形式记录的.以汉字形式记录的 ...
- 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 ...
- 1-3 MATLAB符号变量的使用、符号变量转为匿名函数、向量值匿名函数、符号变量转为向量值函数、结构体批量提取数据
1-3 MATLAB符号变量的使用.符号变量转为匿名函数.向量值匿名函数.符号变量转为向量值函数.结构体批量提取数据 文章目录 1-3 MATLAB符号变量的使用.符号变量转为匿名函数.向量值匿名函数 ...
- Leetcode 第1342题:将数字变成 0 的操作次数 (位运算解题法详解)
前言 Leetcode第1342题如果用直观方式来做,其实是一道难度极低的题目.但是如果采用位运算的方式来解,则会涉及许多有趣的衍生知识点,了解其背后的原理对我们认识位运算有很大的帮助.现在,就让我们 ...
最新文章
- 第5章 用户身份与文件权限
- Linux Kernel TCP/IP Stack — L1 Layer — 多队列网卡
- HtmlUnit解析动态网页并采集网页列表到Excel
- 第一次scrum冲刺
- u-boot-2011.06-rc2移植到mini2440开发板(一)
- 适用于MongoDB和Mongometer的SpiderMonkey至V8
- uva 242——Stamps and Envelope Size
- matplotlib布局_Matplotlib多列,行跨度布局
- Snabbdom(虚拟dom)
- Bootstrap 下拉菜单事件
- 十个值得一试的开源深度学习框架
- 机载激光雷达原理与应用科普(一)
- A. 运维体系 --- SLA理论体系
- c语言输入12行怎么输入,c语言中,定义什么型别的变数能同时储存数字跟字元,怎么输入...
- Mysql分页Limt
- SQL 给时间字段增加一固定时间
- 一周肝出Linux之远程服务详解(ssh远程登录、scp远程复制、sftp安全下载、TCP Wrappers访问控制)
- C 语言中负数移位运算讲解
- JAVA小项目(四)—— 贪吃蛇【轻松入门,附源码】
- 简历之精通 熟练 掌握 熟悉 了解
热门文章
- 组合数(字典序排列)
- 油气田工业控制系统现状
- 适用于DSP的四阶矩阵求逆算法
- 网站的文章怎么才能让百度等搜索引擎快速收录?
- 小猿圈python之python期末考试测试题(二)_小猿圈Python开发面试题(二)
- 第八章 字符串和字符串函数
- python抠图太模糊,讲实话,我会Python之后!我都不屑用PS了!Python抠图太方便了!...
- 用Python编写账号密码登录程序
- 目前最新android处理器排行榜,2016上半年安卓手机处理器排行:骁龙820无意外夺冠...
- 苹果新款笔记本_苹果自研CPU最快下月杀到 搭配史上最便宜Mac笔记本(全文)_苹果 新款MacBook Pro 13英寸_笔记本新闻...