当前位置:网站首页>【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;
}
}
}

边栏推荐
- 叮!Techo Day 腾讯技术开放日如约而至!
- Fleet |「後臺探秘」第 3 期:狀態管理
- Gbase Nantah General Motors appears at the 6th World Intelligence Conference
- 扩充C盘(将D盘的内存分给C盘)
- R语言ggplot2可视化:使用patchwork包将两个ggplot2可视化结果纵向堆叠起来(stacking)形成组合图、一个可视化结果堆叠在另外一个可视化结果上
- QQ被盗号后群发黄图,大批用户“社死”
- R语言ggplot2可视化:使用patchwork包将3个ggplot2可视化结果自定义组合起来构成组合图、两个子图横向组合后和另外一个图纵向组合构成最终组合图
- BatchNorm2d原理、作用及其pytorch中BatchNorm2d函数的参数讲解
- Yiwen teaches you to quickly generate MySQL database diagram
- With 120billion yuan, she will ring the bell for IPO again
猜你喜欢

Innovation and upgrading of supply chain system driven management mode in petrochemical industry and strengthening internal management of enterprises

Power battery is divided up like this

完整的模型训练套路(一)

看界面控件DevExpress WinForms如何创建一个虚拟键盘

实验6 8255并行接口实验【微机原理】【实验】

SaaS application management platform solution in the education industry: help enterprises realize the integration of operation and management

Fleet |「后台探秘」第 3 期:状态管理

halcon 基础总结(一)裁切图片并旋转图像

Realization of a springboard machine

如何从零搭建10万级 QPS 大流量、高并发优惠券系统
随机推荐
R语言ggplot2可视化:使用patchwork包(直接使用加号+)将两个ggplot2可视化结果横向组合起来形成单个可视化结果图
抽奖动画 - 鲤鱼跳龙门
R language ggplot2 visualization: use the patchwork package (directly use the plus sign +) to horizontally combine a ggplot2 visualization result and a data table to form a final result graph
隆重推出 Qodana:您最爱的 CI 的代码质量平台
分布式理论须知
【黑马早报】腾讯回应大批用户QQ号被盗;薇娅丈夫公司被罚19万;中国恒大被申请清盘;关晓彤奶茶店回应被加盟商起诉...
Yiwen teaches you to quickly generate MySQL database diagram
Jackie Chan and fast brand, who is the Savior of Kwai?
R语言ggplot2可视化:使用patchwork包将3个ggplot2可视化结果自定义组合起来构成组合图、两个子图横向组合后和另外一个图纵向组合构成最终组合图
ROS知识点——话题消息的定义与使用
Fleet |「後臺探秘」第 3 期:狀態管理
Calculator (force buckle)
经典模型——Transformer
数组中的第K大元素[堆排 + 建堆的实际时间复杂度]
Halcon basic summary (I) cutting pictures and rotating images
看界面控件DevExpress WinForms如何创建一个虚拟键盘
MIPS assembly language learning -02- logic judgment - foreground input
R language ggplot2 visualization: the patchwork package horizontally combines a ggplot2 visualization result and a plot function visualization result to form a final result graph, aligns the two visua
深度学习基础汇总
R语言ggplot2可视化:使用patchwork包将两个ggplot2可视化结果横向构成新的结果可视化组合图(使用|符号)