1.问题描述

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
For example, two is written as II in Roman numeral, just two one’s added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.
Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:
• I can be placed before V (5) and X (10) to make 4 and 9.
• X can be placed before L (50) and C (100) to make 40 and 90.
• C can be placed before D (500) and M (1000) to make 400 and 900.
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
Example 1:
Input: “III”
Output: 3
Example 2:
Input: “IV”
Output: 4
Example 3:
Input: “IX”
Output: 9
Example 4:
Input: “LVIII”
Output: 58
Explanation: C = 100, L = 50, XXX = 30 and III = 3.
Example 5:
Input: “MCMXCIV”
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

来自 https://leetcode.com/problems/roman-to-integer/description/

2.题目分析

题目要求把罗马数字转换成阿拉伯数字,首先我们先来看看什么是罗马数字,题目中已经给出了具体的计数方法的描述。我们先分析这个罗马数字的字符串,这个字符串可以划分为千位,百位,十位,个位,读出千位后,后面紧接着就是百位了,以此类推。我的想法就是建一个二维的表,分别存储个位,十位,百位,千位。先从千位找起,找到后再找百位,然后十位,个位,找到的条件是查找的起点和find函数的的返回一致(比如4-IV 和5-v,当我们拿v去匹配时会找到iv才结束,因此不能用find()!=-1)。每找到一个,我们就要更新下一次查找的字符串的起点。

3.C++代码

//我的代码:(beats 34%)
int romanToInt(string s)
{//对照表char *c[4][10] = {{ "","I","II","III","IV","V","VI","VII","VIII","IX" },{ "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC" },{ "","C","CC","CCC","CD","D","DC","DCC","DCCC","CM" },{ "","M","MM","MMM" }};int res = 0;//int i = 3;int j = 3;int flag = 0;for ( i; i >= 0; i--){for ( j ; j > 0; j--){if (s.find(c[i][j],flag) == flag)//在起点处找到匹配的{res += j*pow(10, i);string tmp_str = c[i][j];flag+=tmp_str.length();//更新下一次查找的起点break;}}j = 9;}       return res;
}
//讨论区比较好的方法
int romanToInt2(string s)
{int res = 0;for (int i = s.length() - 1; i >= 0; i--){switch (s[i]){case 'I':res += (res > 5 ? -1 : 1);break;case 'V':res += 5;break;case'X':res += 10 * (res > 50 ? -1 : 1);break;case 'L':res += 50;break;case 'C':res += 100 * (res > 500 ? -1 : 1);break;case 'D':res += 500;break;case 'M':res += 1000;break;}}return res;
}
//附加阿拉伯转罗马数字
string  intTointroman(int nums)
{string s;char *c[4][10] = { { "","I","II","III","IV","V","VI","VII","VIII","IX" },{ "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC" },{ "","C","CC","CCC","CD","D","DC","DCC","DCCC","CM" },{ "","M","MM","MMM" }};s.append(c[3][nums / 1000]);s.append(c[2][nums % 1000 / 100]);s.append(c[1][nums % 100 / 10]);s.append(c[0][nums % 10]);return s;
}

4.相关知识点

string类:
https://blog.csdn.net/hero_myself/article/details/52313617

13. Roman to Integer相关推荐

  1. LeetCode 13. Roman to Integer

    问题链接 LeetCode 13. Roman to Integer 题目解析 将罗马数字转换成普通数字. 解题思路 先简单了解一下什么是罗马数字. 基本字符:I,V,X,L,C,D,M 相应的阿拉伯 ...

  2. leetcode python3 简单题13. Roman to Integer

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第十三题 (1)题目 英文: Given a roman numeral, conv ...

  3. LeetCode: 13. Roman to Integer

    051106 题目 Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol ...

  4. 【LeetCode】13. Roman to Integer

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

  5. 13.  Roman to Integer

    2019独角兽企业重金招聘Python工程师标准>>> 见12 转载于:https://my.oschina.net/datacube/blog/702856

  6. 13. Roman to Integer

    解题思路: 1)将所有字母转化为对应的数值: 2)如果字符串长度等于1,直接输出这一个字母对应的数值:如果大于1,则比较前后两个字母对应数值的大小,如果前面小于后面,则后面的减去前面在叠加到总和上,反 ...

  7. leetcode 12 ,13 Integer to Roman amp;amp;Roman to Integer 罗马与阿拉伯数组转换

    12 Integer to Roman 13 Roman to Integer 有可能不注意的结果: class Solution {public:/*1.相同的数字连写,所表示的数等于这些数字相加得 ...

  8. LeetCode刷题实战(13):Roman to Integer

    题目描述: 13 Roman to Integer   49.5% Easy Roman numerals are represented by seven different symbols: I, ...

  9. 罗马数字转整数 · Roman to Integer

    13. Roman to Integer [抄题]: [暴力解法]: 时间分析: 空间分析: [思维问题]: 没有想到罗马字是逆序的情况 没有想到要先用toCharArray()方法把字符串拆成一个字 ...

最新文章

  1. Struts1.x系列教程(4):标签库概述与安装
  2. ImportError: Could not import backend for traitsui. Make sure you have a suitable UI toolkit like
  3. 看看阿里是如何做软件集成发布的
  4. antv图例出现分页_带图例、文本的饼图
  5. 使用promise解决回调地狱_使用Promise 解决回调地狱
  6. 社会化图标html,[CSS]响应式社会化分享按钮
  7. ORACLE----触发器,存储过程及JOB
  8. 在 Java CAPS 中使用 LDAP
  9. python敏感字替换_教学案例_Python处理敏感词汇方法
  10. Silverlight 同域WCF免跨域文件
  11. 码农翻身之编程语言的巅峰
  12. Nginx学习笔记(三) Nginx基本数据结构
  13. SharpDevelop--一款很不错的.NET开发工具
  14. 图像分割并存储 matlab,matlab图像分割算法源码.pdf
  15. 阿里巴巴国际站关键字抓取工具
  16. java 锯齿_Java2D图形抗锯齿
  17. 在web页面实时播放监控视频
  18. 【构建基于树莓派cm4的机器人控制系统的运行环境】
  19. 【USACO1.3.3】最棒的回文
  20. 详细功能描述及代码带您快速接入百度大脑通用文字识别

热门文章

  1. c语言作用域详解,C语言之作用域
  2. 最厉害的面试技巧都有哪些?
  3. golang 实现华容道
  4. 个人博客,草根的成长之旅
  5. 利用xls下载链接下载资源
  6. echart 广州3d_vue echarts 3D地图+省+弹窗
  7. python设计模式名片_Python设计模式之门面模式简单示例
  8. dev stg prd 开发 测试 生产环境
  9. 汽车牌照自动识别系统
  10. js-sha1实现SHA1加密