题目

罗马数字包含以下七种字符: 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_罗马数字转整数的更多相关文章

  1. C#版 - Leetcode 13. 罗马数字转整数 - 题解

    C#版 - Leetcode 13. 罗马数字转整数 - 题解 Leetcode 13. Roman to Integer 在线提交: https://leetcode.com/problems/ro ...

  2. 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 ,即 ...

  3. 【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 ,即为 ...

  4. Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解

    Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全   Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...

  5. LeetCode 13 Roman to Integer(罗马数字转为整数)

    题目链接 https://leetcode.com/problems/roman-to-integer/?tab=Description   int toNumber(char ch) { switc ...

  6. C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数

    各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 输出: 解释: 各位相加的过程为: + = , + = . 由于 是一位数,所以返回 . 进阶:你可以 ...

  7. Leecode刷题之旅-C语言/python-13.罗马数字转整数

    /* * @lc app=leetcode.cn id=13 lang=c * * [13] 罗马数字转整数 * * https://leetcode-cn.com/problems/roman-to ...

  8. 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 ...

  9. 13. Roman to Integer[E]罗马数字转整数

    题目 Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from ...

随机推荐

  1. 查看docker的挂载目录

    docker inspect container_name | grep Mounts -A 20docker inspect container_id | grep Mounts -A 20

  2. Cf水题B - Combination

    地址: https://vjudge.net/problem/27861/origin Ilya plays a card game by the following rules. A player ...

  3. STM32F407的Modbus做为主站与从站通讯

    在调试STM32F407的串口Modbus通讯之前,也使用过Modbus通讯,只不过都是在PLC或则昆仑通态的触摸屏上使用直接调用现成的库里面的模块,驱动就可以,相对于STM32来,使用PLC库里面的 ...

  4. 关于自动化打包部署Jenkins的使用和配置

    (未写完整,待续...) 名词解释: 1.Jenkins中对svn进行操作,可通过插件和脚本两种方式进行. 插件方式 在插件管理中安装"Subversion Plug-in",即可 ...

  5. TCP协议的学习

    1.关于TCP理解的重点(TCP协议可以理解为就是一段代码) (1).TCP协议工作在传输层,对上服务socket接口,对下调用IP层 (2).TCP协议面向连接,通信前必须先3次握手建立连接关系后才 ...

  6. 1. rabbitmq 安装

    1. ubuntu 16 18 安装 https://blog.csdn.net/haeasringnar/article/details/82715823 2. centos 7 https://w ...

  7. Aras Innovator客户端批量下载关联文件

    <button onclick="btnDownload();" id="downfilebtn">批量下载关联文件</button> ...

  8. SALESGROSSSALES_成本_利润

    //获取成本GETCOST_TMP:NoConcatenateLOAD T_SAL_OUTSTOCK.LE_ID, [T_SAL_OUTSTOCK.LCY CODE], T_SAL_OUTSTOCK. ...

  9. Maven高级:01.maven分模块构建&&02.私服的应用

    IntelliJ IDEA 2018.3.6 x64 07 Maven高级:01.maven分模块构建(上) 07 Maven高级:01.maven分模块构建(中) 07 Maven高级:01.mav ...

  10. Anaconda Installation on Mac: conda command not found 环境变量配置

    Mac系统安装完Anaconda 3.7后在terminal输入conda --version,返回command not found 原因可能是没有配置环境变量 在terminal输入vi ~/.b ...