微信改版,加星标不迷路!

每日一算法-罗马数字转整数

作者:阿广

阅读目录

  • 1 题目

  • 2 解析

1 题目

罗马数字包含以下七种字符: I, V, X, LCD 和 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. 算法 罗马数字转整数

    算法 罗马数字转整数 1.题目 2.方法 2.1枚举法(没得办法) 2.2map(大神级别) 1.题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 ...

  2. Java算法罗马数字转整数

    本文章只提供算法. 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符          数值 I             1 V             5 X         ...

  3. 算法 --- 罗马数字转整数

    解体思路: 1.写一个对象trans用于保存罗马和数字之间的映射关系 2.重点在于当数值小的出现在数值大的左边时,会减去该数,出现在右边时会加上该数,因此需要与后面的进行比较 3.在得到s时,首先给它 ...

  4. 【每日一算法】整数反转

    微信改版,加星标不迷路! 每日一算法 - 整数反转 12 月 14 日 周 四 难度:简单.由于读者水平不一,所以从简单的做起,逐渐加难度. 题目:给出一个 32 位的有符号整数,你需要将这个整数中每 ...

  5. leetcode 罗马数字与整数的转换算法

    介绍: 该算法是将罗马数字转换为整数,思路如下:比如IXX,使用临时变量temp保存上一个已经遍历的罗马数字,比如:遍历时是从后往前遍历的:1> 刚开始时,temp = 0; 遍历当前遍历到第一 ...

  6. 【算法百题之四十二】罗马数字转整数

    [算法百题之四十二]罗马数字转整数    大家好,我是Lampard~~    很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!    今天的问题是:罗马数字转整数 作为[整 ...

  7. 【算法练习】罗马数字转整数与整数转罗马数字

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

  8. 每天Leetcode 刷题 初级算法篇-数学问题-罗马数字转整数

    题目要求: 力扣题解: 代码 /*** @program: mydemo* @description: 罗马数字转整数* @author: Mr.zeng* @create: 2021-02-24 0 ...

  9. Leetcode算法——12、整数转罗马数字

    题目 给定一个整数,将其转为罗马数字.整数的范围为 1 ~ 3999. 罗马数字可以由7个符号来表示: I, V, X, L, C, D 和 M. 符号 值 I 1 V 5 X 10 L 50 C 1 ...

最新文章

  1. Windows Phone 7 Tips “.NET研究”(4)
  2. 暑假集训8.10-网络流套树剖套线段树
  3. html页面设置document类型,DOM-Document类型
  4. 关于mysql修改密码后的问题
  5. android 跨进程点击方式总结
  6. 【java】Java实现单向链表反转
  7. python全套教程大全-千锋出品全套python视频教程,400大全集,你了解吗?
  8. 线程池作用及Executors方法讲解
  9. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
  10. linux tail 命令 阿星小栈
  11. 【机器学习】某工19级智科专业机器学习期末复习资料
  12. 实战玩客云刷armbian及共享打印机教程
  13. java二嗨租车项目_Java入门第二季第六章项目实战(租车系统)
  14. go学习笔记之bufio的使用
  15. littlevgl之cont 控件(容器控件)
  16. 关于模拟题的一些弱鸡总结
  17. 程序员小强转行记#0002
  18. 最新:拼多多将追回所有“薅羊毛”订单,包括已充值话费和Q币订单...
  19. UE4《大象无形》学习笔记
  20. 记录STM32的一次不明原因的复位

热门文章

  1. java md5算法,JAVA实现MD5算法
  2. 14 款命令行常用工具的替代品!
  3. 用Python分析5000+抖音大V,粉丝最喜欢的视频类型是它
  4. 机器学习模型五花八门不知道怎么选?这份指南告诉你
  5. Java跌落神坛,Python继续夺冠....凭啥?
  6. 阿里带火的中台到底是什么?白话中台战略
  7. 小样,加张图你就不认识我了?“补丁”模型骗你没商量!| 技术头条
  8. 大数据的“平民化”、“流动化”、“商业化”推动企业升级与转型
  9. 10行代码实现目标检测,请收下这份教程
  10. 跨界 | 土木工程也开始AI化了:用卷积神经网络实现结构损伤视觉识别