【每日一算法】罗马数字转整数
微信改版,加星标不迷路!
每日一算法-罗马数字转整数
作者:阿广
阅读目录
1 题目
2 解析
1 题目
罗马数字包含以下七种字符: 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 到 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.
2 解析
整体的思路很简单,题目中是罗马数字到数字的转换,那么我们使用map数组存储对应关系,然后遍历罗马数字字符串的过程中判断是减法还是加法,最后返回结果就ok了。
2.1
首先使用map数组存储罗马数字和数字之间的映射关系。
map<char,int> m ; m['I'] = 1; m['V'] = 5; m['X'] = 10; m['L'] = 50; m['C'] = 100; m['D'] = 500; m['M'] = 1000;
2.2
然后获取罗马数字的长度
int length = s.size();
遍历罗马数字
for(int i = 0 ; i < length ; i++){ //下边添加处理过程}
2.3
遍历的过程当中,判断是减法还是加法。
判断为减法的情况的方法:
if(s[i] == 'I' && s[i+1] == 'V'){ result = result + m[s[i+1]]-m[s[i]]; i++;} else if (s[i] == 'I' && s[i+1] == 'X'){ result = result + m[s[i+1]]-m[s[i]]; i++;}else if (s[i] == 'X' && s[i+1] == 'L'){ result = result + m[s[i+1]]-m[s[i]]; i++;}else if (s[i] == 'X' && s[i+1] == 'C'){ result = result + m[s[i+1]]-m[s[i]]; i++;}else if (s[i] == 'C' && s[i+1] == 'D'){ result = result + m[s[i+1]]-m[s[i]]; i++;}else if (s[i] == 'C' && s[i+1] == 'M'){ result = result + m[s[i+1]]-m[s[i]]; i++;}
2.4
判断为加法的情况(除了减法的情况,即为加法的情况)
else{ result += m[s[i]];}
2.5
最后返回结果result即可
return result;
2.6
完整代码
class Solution {public: int romanToInt(string s) { int result = 0; map<char,int> m ; m['I'] = 1; m['V'] = 5; m['X'] = 10; m['L'] = 50; m['C'] = 100; m['D'] = 500; m['M'] = 1000; int length = s.size(); //printf("%d",length); //result = m[s[0]]; for(int i = 0 ; i < length ; i++){ if(s[i] == 'I' && s[i+1] == 'V'){ result = result + m[s[i+1]]-m[s[i]]; i++; } else if (s[i] == 'I' && s[i+1] == 'X'){ result = result + m[s[i+1]]-m[s[i]]; i++; }else if (s[i] == 'X' && s[i+1] == 'L'){ result = result + m[s[i+1]]-m[s[i]]; i++; }else if (s[i] == 'X' && s[i+1] == 'C'){ result = result + m[s[i+1]]-m[s[i]]; i++; }else if (s[i] == 'C' && s[i+1] == 'D'){ result = result + m[s[i+1]]-m[s[i]]; i++; }else if (s[i] == 'C' && s[i+1] == 'M'){ result = result + m[s[i+1]]-m[s[i]]; i++; }else{ result += m[s[i]]; }
} return result; }};
今日问题
你去过哪些知名的景点?
有什么深刻的印象?
打卡格式:打卡第n天,答:...
为什么打卡?戳下面你就知道了!
猛
戳
这
儿
21/天/养/一/个/好/习/惯
【每日一算法】罗马数字转整数相关推荐
- 算法 罗马数字转整数
算法 罗马数字转整数 1.题目 2.方法 2.1枚举法(没得办法) 2.2map(大神级别) 1.题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 ...
- Java算法罗马数字转整数
本文章只提供算法. 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X ...
- 算法 --- 罗马数字转整数
解体思路: 1.写一个对象trans用于保存罗马和数字之间的映射关系 2.重点在于当数值小的出现在数值大的左边时,会减去该数,出现在右边时会加上该数,因此需要与后面的进行比较 3.在得到s时,首先给它 ...
- 【每日一算法】整数反转
微信改版,加星标不迷路! 每日一算法 - 整数反转 12 月 14 日 周 四 难度:简单.由于读者水平不一,所以从简单的做起,逐渐加难度. 题目:给出一个 32 位的有符号整数,你需要将这个整数中每 ...
- leetcode 罗马数字与整数的转换算法
介绍: 该算法是将罗马数字转换为整数,思路如下:比如IXX,使用临时变量temp保存上一个已经遍历的罗马数字,比如:遍历时是从后往前遍历的:1> 刚开始时,temp = 0; 遍历当前遍历到第一 ...
- 【算法百题之四十二】罗马数字转整数
[算法百题之四十二]罗马数字转整数 大家好,我是Lampard~~ 很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙! 今天的问题是:罗马数字转整数 作为[整 ...
- 【算法练习】罗马数字转整数与整数转罗马数字
Leetcode 题目(难度:简单) 13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 ...
- 每天Leetcode 刷题 初级算法篇-数学问题-罗马数字转整数
题目要求: 力扣题解: 代码 /*** @program: mydemo* @description: 罗马数字转整数* @author: Mr.zeng* @create: 2021-02-24 0 ...
- Leetcode算法——12、整数转罗马数字
题目 给定一个整数,将其转为罗马数字.整数的范围为 1 ~ 3999. 罗马数字可以由7个符号来表示: I, V, X, L, C, D 和 M. 符号 值 I 1 V 5 X 10 L 50 C 1 ...
最新文章
- Windows Phone 7 Tips “.NET研究”(4)
- 暑假集训8.10-网络流套树剖套线段树
- html页面设置document类型,DOM-Document类型
- 关于mysql修改密码后的问题
- android 跨进程点击方式总结
- 【java】Java实现单向链表反转
- python全套教程大全-千锋出品全套python视频教程,400大全集,你了解吗?
- 线程池作用及Executors方法讲解
- 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
- linux tail 命令 阿星小栈
- 【机器学习】某工19级智科专业机器学习期末复习资料
- 实战玩客云刷armbian及共享打印机教程
- java二嗨租车项目_Java入门第二季第六章项目实战(租车系统)
- go学习笔记之bufio的使用
- littlevgl之cont 控件(容器控件)
- 关于模拟题的一些弱鸡总结
- 程序员小强转行记#0002
- 最新:拼多多将追回所有“薅羊毛”订单,包括已充值话费和Q币订单...
- UE4《大象无形》学习笔记
- 记录STM32的一次不明原因的复位
热门文章
- java md5算法,JAVA实现MD5算法
- 14 款命令行常用工具的替代品!
- 用Python分析5000+抖音大V,粉丝最喜欢的视频类型是它
- 机器学习模型五花八门不知道怎么选?这份指南告诉你
- Java跌落神坛,Python继续夺冠....凭啥?
- 阿里带火的中台到底是什么?白话中台战略
- 小样,加张图你就不认识我了?“补丁”模型骗你没商量!| 技术头条
- 大数据的“平民化”、“流动化”、“商业化”推动企业升级与转型
- 10行代码实现目标检测,请收下这份教程
- 跨界 | 土木工程也开始AI化了:用卷积神经网络实现结构损伤视觉识别