Leetcode13_罗马数字转整数
题目
罗马数字包含以下七种字符: 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.
思路
那六种情况也就是说,只有当前者的值小于后者,才进行对前者的减法,所以只需要每次和下一个字符对比就行了,其他情况都是加法
代码
1 class Solution { 2 public: 3 int romanToInt(string s) { 4 int chang = s.size(); 5 int sum=0,index=0; 6 for(index=0;;index++){ 7 if(index==chang-1){ 8 sum+=getsum(s[index]);//注意别把index写成chang,因为chang是溢出的 9 break; 10 } 11 else{ 12 if(getsum(s[index])<getsum(s[index+1])) 13 sum-=getsum(s[index]); 14 else 15 sum+=getsum(s[index]); 16 } 17 18 } 19 20 return sum; 21 } 22 int getsum(char c){ 23 int num; 24 switch(c){ 25 case 'I':num=1; 26 break; 27 case 'V':num=5; 28 break; 29 case 'X':num=10; 30 break; 31 case 'L':num=50; 32 break; 33 case 'C':num=100; 34 break; 35 case 'D':num=500; 36 break; 37 case 'M':num=1000; 38 break; 39 40 } 41 return num; 42 } 43 44 45 };
解释代码
22-42行用了一个函数,来对每一个罗马数字进行赋值,接着就是用这个函数来调用每个字母的值,最后返回调用的值也就是num。
3-21行的chang是确定输入罗马字符的长度,sum是总值,index是现在到字符的下标位置
7-8行是当index到最后一个位置时,也没有右边的值了,无需比较左右值大小,所以直接加上s【index】即可
11行是倘若没有到最后一个字符时的情况
12-13行首先判断是否左边的值小于右边的值,小于的话,就减去左边的值
14-15行 左边的值比右边值大的话,那就加上左边的值
20行的return sum是返回最后的总和,此时21行的大括号是第3行的那个,因为接下来的函数是自定义的,是属于第一行solution类中的。
收获
s.size,s为string类型时,是获取长度的
巧用自定义函数
switch case语句的语法需要总结下,因为发现自己这个不足,比如case后单引号,以及case加冒号
这道题的最高赞是用python的字典划分写的,果然是python快呀,不过条条大路通罗马,选择自己所选择的走下去就好
这道题从晚上6点多开始写,中间去操场跑步,锻炼,直到晚上10点多才写出来。不过运动后自己回来看代码的精神突然很集中,并且今天运动时候,又仿佛回到了大一时候打拳击的那种一往无前,乐观的态度,这段时间总是很丧,遇难而退,运动后的心态,让我变成了遇难而上,我不怕麻烦,也不怕写代码走弯路,最大的弯路就是怕走弯路,有两个词,一个叫功不唐捐,一个叫殊途同归。有了麻烦去解决麻烦,有困难去解决困难,方法总比困难多,生活中要有种乐观积极的态度来面对生活,需要认真对待生活,我爱生活。写代码同时也成为了我专注注意力以及认真思考的过程,我很享受代码从一无所知,让我通过搜索各种资料,通过各种途径,把它搞懂的感觉,我喜欢这种感觉。
本来这篇博客是22点多打算写的,但是中间有个新认识的同学我们商量了一个数据可视化的比赛,期间我在找数据,所以就拖延到现在,我还拖延了大概有个3,4篇leetcode题目没写,明天继续加油!
原题链接
13. 罗马数字转整数
转载于:https://www.cnblogs.com/vocoub/p/11570205.html
Leetcode13_罗马数字转整数相关推荐
- 【每日一算法】罗马数字转整数
微信改版,加星标不迷路! 每日一算法-罗马数字转整数 作者:阿广 阅读目录 1 题目 2 解析 1 题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1 V 5 ...
- LeetCode(13.罗马数字转整数) JAVA Hashmap
LeetCode(13.罗马数字转整数) JAVA Hashmap 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D ...
- leetcode 两数之和 整数反转 回文数 罗马数字转整数
1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
- LeetCode 13罗马数字转整数14最长公共前缀
罗马数字转整数 上一题是整数转罗马数字,这题是罗马数字转整数.虽然是简单题,但我感觉其实有点烦. 上一次是数字转字符,这次是字符转数字,总的来说大体思想还是差不多的. 首先整个字符串可能是这样构造的: ...
- 罗马数字 java_【leetcode刷题】[简单]13.罗马数字转整数(roman to integer)-java
罗马数字转整数 roman to integer 题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M ...
- LeetCode题 - 13 罗马数字转整数
罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 I ...
- 20190913:(leetcode习题)罗马数字转整数
罗马数字转整数 题目 大致思路 代码实现 题目 大致思路 跟上题一样,不需要思路,直接把各种情况列出来即可. 代码实现 package com.immunize.leetcode.romanTOINT ...
- 力扣——罗马数字转整数
罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 I ...
- 每天Leetcode 刷题 初级算法篇-数学问题-罗马数字转整数
题目要求: 力扣题解: 代码 /*** @program: mydemo* @description: 罗马数字转整数* @author: Mr.zeng* @create: 2021-02-24 0 ...
最新文章
- java二维数组矩阵_java使用二维数组开发五子棋
- 关于B站除夕夜被攻击
- 相当全面:推荐系统干货总结
- 打趴系统的不一定是技术
- appium的desired_caps参数
- SAP Spartacus应用入口的模块加载单步调试
- 循环队列的java结构_Java数据结构——循环队列
- 内外分离接口依赖及UIScrollView知识点
- r9270公版bios_显卡成功刷入UEFI GOP BIOS 彻底解决开机扁苹果
- UG与PM数控编程的区别在哪
- 2020年06月16日_万金油_新浪博客
- 数学建模常用模型04 :灰色关联分析法
- 达摩院高清人像美肤模型ABPN CVPR论文深入解读
- 2023年1月21日除夕活动取消通知
- Discriminative Feature Learning for Unsupervised Video Summarization(论文翻译)
- PL/SQL教程:PL/SQL Developer使用技巧
- iphone复制不能全选_iphone长按键盘进行复制、粘贴、全选操作技巧
- 连续三次世界500强面试经历
- 分到用时方恨少--CSDN赚积分办法
- 程序员上了年纪可以做啥?
热门文章
- [附源码]JAVA+ssm计算机毕业设计高校网上报销系统(程序+Lw)
- 笔记本跑linux续航,大年初一发售 System76推15.6吋超薄长续航Linux笔记本Darter Pro
- http1.0协议简介
- Http状态码大全(404、500、505等)
- 【数据结构与算法】Manacher算法
- 需要!男朋友快来找我。
- python 数据归一化/标准化方法与代码(离差标准化,log归一化,标准化,比例归一化,反正切归一化)
- Deepin Linux安装
- UOJ 73 [WC2015]未来程序
- Python分析网易云音乐近5年热门歌单