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.
思路
那六种情况也就是说,只有当前者的值小于后者,才进行对前者的减法,所以只需要每次和下一个字符对比就行了,其他情况都是加法
代码
class Solution {
public:
int romanToInt(string s) {
int chang = s.size();
int sum=,index=;
for(index=;;index++){
if(index==chang-){
sum+=getsum(s[index]);//注意别把index写成chang,因为chang是溢出的
break;
}
else{
if(getsum(s[index])<getsum(s[index+]))
sum-=getsum(s[index]);
else
sum+=getsum(s[index]);
}
}
return sum;
}
int getsum(char c){
int num;
switch(c){
case 'I':num=;
break;
case 'V':num=;
break;
case 'X':num=;
break;
case 'L':num=;
break;
case 'C':num=;
break;
case 'D':num=;
break;
case 'M':num=;
break;
}
return num;
}
};
解释代码
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. 罗马数字转整数
Leetcode13_罗马数字转整数的更多相关文章
- C#版 - Leetcode 13. 罗马数字转整数 - 题解
C#版 - Leetcode 13. 罗马数字转整数 - 题解 Leetcode 13. Roman to Integer 在线提交: https://leetcode.com/problems/ro ...
- Leetcode#13. Roman to Integer(罗马数字转整数)
题目描述 罗马数字包含以下七种字符:I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即 ...
- 【LeetCode】13. 罗马数字转整数
题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为 ...
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全 Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...
- LeetCode 13 Roman to Integer(罗马数字转为整数)
题目链接 https://leetcode.com/problems/roman-to-integer/?tab=Description int toNumber(char ch) { switc ...
- C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数
各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 输出: 解释: 各位相加的过程为: + = , + = . 由于 是一位数,所以返回 . 进阶:你可以 ...
- Leecode刷题之旅-C语言/python-13.罗马数字转整数
/* * @lc app=leetcode.cn id=13 lang=c * * [13] 罗马数字转整数 * * https://leetcode-cn.com/problems/roman-to ...
- LeetCode:罗马数字转整数【13】
LeetCode:罗马数字转整数[13] 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 10 ...
- 13. Roman to Integer[E]罗马数字转整数
题目 Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from ...
随机推荐
- windows 10下的python开发环境
linux子系统 按照文档 https://www.jianshu.com/p/2bcf5eca5fbc 的前五步,完成 ubuntu子系统安装. 不需安装图形桌面,无使用价值. 在https://w ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 插入数据
MySQL 表中使用 INSERT INTO SQL语句来插入数据. 可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 以下为向MySQL数据表插入数据通 ...
- POJ 1860:Currency Exchange
Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 22648 Accepted: 818 ...
- 运行roscore出现unable to contact my own server无法启动小海龟的部分故障问题解决
运行roscore后,出现下图这种情况(unable to contact my own server) 原因是找不到http://后面那些,ping不到域名或IP. 参考http://www.ros ...
- Thread--线程工作万花筒
线程工作内存图. 线程状态.
- shell中通过sed替换文件中路径
通常sed指令修改行内容时使用:sed -i " 9 s/^.*/"type in what you want modified!"/" 其中"typ ...
- Django模板渲染——(二)
模板标签 模板是由HTML代码和一些逻辑控制代码组成的,逻辑控制代码除了前面介绍的变量和过滤器,还要一个非常重要的模板标签.模板标签的语法规则是{% tag %},模板标签在渲染的过程中能提供任意的逻 ...
- ASP.NET ZERO 学习 导航菜单
定义PageNames和PermissionName PageNames : Web/App_Start/Navigation/PageNames.cs public const string Das ...
- 堆--P1168 中位数
题目描述 给出一个长度为N的非负整数序列Ai,对于所有1≤k≤(N+1)/2,输出A1,A3,…,A2k−1的中位数.即前1,3,5,…个数的中位数. 输入格式 第1行为一个正整数N,表示了序列长度 ...
- Codeforces 1294B - Collecting Packages
题目大意: 机器人从(0,0)开始,他只能往上'U'或者往右'R'走 坐标系中有着很多包裹,分别在一些点上 机器人需要走过去把这些包裹全部收集起来 问能不能做到 如果能,再输出移动方式,相同移动方式输 ...