当前位置:网站首页>【LeetCode】13、罗马数字转整数
【LeetCode】13、罗马数字转整数
2022-06-28 15:21:00 【小曲同学呀】
13、罗马数字转整数
罗马数字包含以下七种字符: 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:
输入: s = "III"
输出: 3
示例 2:
输入: s = "IV"
输出: 4
示例 3:
输入: s = "IX"
输出: 9
示例 4:
输入: s = "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.
示例 5:
输入: s = "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.
提示:
1 <= s.length <= 15
s 仅含字符 (‘I’, ‘V’, ‘X’, ‘L’, ‘C’, ‘D’, ‘M’)
题目数据保证 s 是一个有效的罗马数字,且表示整数在范围 [1, 3999] 内
题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。
IL 和 IM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX 。
关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics 。
解题思路:
按照题目的描述,可以总结如下规则:
- 罗马数字由 I,V,X,L,C,D,M 构成;
- 当小值在大值的左边,则减小值,如 IV=5-1=4;
- 当小值在大值的右边,则加小值,如 VI=5+1=6;
- 由上可知,右值永远为正,因此最后一位必然为正。
一言蔽之,把一个小值放在大值的左边,就是做减法,否则为加法。
在代码实现上,可以往后看多一位,对比当前位与后一位的大小关系,从而确定当前位是加还是减法。当没有下一位时,做加法即可。
也可保留当前位的值,当遍历到下一位的时,对比保留值与遍历位的大小关系,再确定保留值为加还是减。最后一位做加法即可。
参谋代码:
class Solution {
public int romanToInt(String s) {
int sum = 0;
int preNum = getValue(s.charAt(0));
for(int i = 1;i < s.length(); i ++) {
int num = getValue(s.charAt(i));
if(preNum < num) {
sum -= preNum;
} else {
sum += preNum;
}
preNum = num;
}
sum += preNum;
return sum;
}
private int getValue(char ch) {
switch(ch) {
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
}
}

边栏推荐
- After QQ was stolen, a large number of users "died"
- 信创操作系统--麒麟Kylin桌面操作系统 (项目十 安全中心)
- SAP mts/ato/mto/eto topic 9: front and back desk operation in m+m mode, strategy 50, preparation of raw materials and semi-finished products in advance
- Is PMP really useful?
- R语言使用nnet包的multinom函数构建无序多分类logistic回归模型、使用回归系数及其标准误计算每个系数对应的Z统计量的值
- 叮!Techo Day 腾讯技术开放日如约而至!
- MIPS assembly language learning-01-sum of two numbers, environment configuration and how to run
- 坐拥1200亿,她又要IPO敲钟了
- Ros21 lecture
- 最长连续序列
猜你喜欢

新零售线下店逆势起飞,通膨乌云下的消费热情

美国乔布斯,殁了;中国乔布斯,卖了

Classmate Zhang hasn't learned to be an anchor yet
![数组中的第K大元素[堆排 + 建堆的实际时间复杂度]](/img/69/bcafdcb09ffbf87246a03bcb9367aa.png)
数组中的第K大元素[堆排 + 建堆的实际时间复杂度]

智慧园区数智化供应链管理平台如何优化流程管理,驱动园区发展提速增质?

隐私计算 FATE - 离线预测

Express template engine

蔚来潜藏的危机:过去、现在到未来

Technical secrets of ByteDance data platform: implementation and optimization of complex query based on Clickhouse

The hidden crisis of Weilai: past, present and future
随机推荐
How can the digital intelligent supply chain management platform of the smart Park optimize process management and drive the development of the park to increase speed and quality?
化学制品制造业智慧供应商管理系统深度挖掘供应商管理领域,提升供应链协同
Ros21 lecture
S2b2c system website solution for kitchen and bathroom electrical appliance industry: create s2b2c platform Omni channel commercial system
R语言ggplot2可视化:使用patchwork包将3个ggplot2可视化结果自定义组合起来构成组合图、两个子图横向组合后和另外一个图纵向组合构成最终组合图
[C language] how to generate normal or Gaussian random numbers
R语言ggplot2可视化:使用patchwork包(直接使用加号+)将一个ggplot2可视化结果和数据表格横向组合起来形成最终结果图
Talking about open source - Linus and Jim talk about open source in China
Realization of a springboard machine
MIPS assembly language learning-01-sum of two numbers, environment configuration and how to run
MySQL主从切换的超详细步骤
With 120billion yuan, she will ring the bell for IPO again
雷科防务:4D毫米波雷达产品预计可以在年底量产供货
R language ggplot2 visualization: use the patchwork package (directly use the plus sign +) to horizontally combine a ggplot2 visualization result and a plot function visualization result to form a fin
BatchNorm2d原理、作用及其pytorch中BatchNorm2d函数的参数讲解
[C language] nextday problem
C语言基础语法
How to solve the following problems in the Seata database?
ORACLE中dbms_output.put_line输出问题的解决过程
华为能成“口红一哥”,或者“带货女王”吗?