前言

 

【LeetCode 题解】系列传送门:  http://www.cnblogs.com/double-win/category/573499.html

 

1.题目描述

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

2. 思路

找到规则即可

罗马数字的表示:

I~1 V~5 X~10 L~50 C~100 D~500 M~1000

规则:

基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。

不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。

默认所有输入均为正确表示的罗马数字.

如果在输入中有不符合规则的数字,就需要加特殊的判断。

有几条须注意掌握:

  1. V 和X 左边的小数字只能用Ⅰ。
  2. L 和C 左边的小数字只能用X。
  3. D 和M 左边的小数字只能用C。       --摘自百度百科http://baike.baidu.com/view/42061.htm?fr=aladdin

在此就不赘述了

3. 解法

 1 class Solution {
2 public:
3 int romanToInt(string s) {
4 int ans=0,i;
5 map<char,int> Ma;
6 {
7 Ma['I']=1;
8 Ma['V']=5;
9 Ma['X']=10;
10 Ma['L']=50;
11 Ma['C']=100;
12 Ma['D']=500;
13 Ma['M']=1000;
14 }
15 ans = Ma[s[0]];
16 for(i=1;i<s.size();i++)
17 {
18 ans = ans + Ma[s[i]];
19 if(Ma[s[i]] > Ma[s[i-1]] )
20 ans -= 2* Ma[s[i-1]];
21 }
22 return ans;
23 }
24 };

4. 相关题目

相对应的一道题:Roman to Interger : http://www.cnblogs.com/double-win/p/3760002.html

作者:Double_Win

出处:   http://www.cnblogs.com/double-win/p/3761803.html

声明: 由于本人水平有限,文章在表述和代码方面如有不妥之处,欢迎批评指正~

[LeetCode 题解]: Roman to Interger的更多相关文章

  1. LeetCode题解——Roman to Integer

    题目: 将罗马数字转换为整数. 解法: 可以参考上一篇数字转换为罗马数字的规则. 代码: class Solution { public: int sym2int(char sym) //罗马数字字符 ...

  2. [LeetCode 题解]: String to Interger (atoi)

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  3. [LeetCode 题解]: Interger to Roman

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given an i ...

  4. 【LeetCode题解】二叉树的遍历

    我准备开始一个新系列[LeetCode题解],用来记录刷LeetCode题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有 ...

  5. leetcode题解-122买卖股票的最佳时期

    题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...

  6. 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)

    目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...

  7. 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)

    目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...

  8. 【LeetCode题解】232_用栈实现队列(Implement-Queue-using-Stacks)

    目录 描述 解法一:在一个栈中维持所有元素的出队顺序 思路 入队(push) 出队(pop) 查看队首(peek) 是否为空(empty) Java 实现 Python 实现 解法二:一个栈入,一个栈 ...

  9. 【LeetCode题解】844_比较含退格的字符串(Backspace-String-Compare)

    目录 描述 解法一:字符串比较 思路 Java 实现 Python 实现 复杂度分析 解法二:双指针(推荐) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解笔记可以 ...

随机推荐

  1. JavaScript知识总结--引用类型(Object-Array-Function-Global-Math)

    对象(引用类型的值)是引用类型的一个实例,新对象是使用new操作符后跟一个构造函数来创建的.构造函数本身就是一个函数,该函数用于创建新对象.ECMAScript提供了很多原生引用类型(Object,A ...

  2. django -- url 的 命名空间

    命名空间 a. project.urls.py 1 2 3 4 5 6 from django.conf.urls import url,include   urlpatterns = [     u ...

  3. Struts2结果页面配置(Result)

    1.全局页面配置 全局结果页面:针对一个包下的所有Action的页面跳转都可生效 <global-results> <result name="xxx">/ ...

  4. 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(附Git地址)

    本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...

  5. PHP - 闭包Closure和lambda function

    现在的语言没有闭包简直都不好意思说出来. 想要了解闭包是什么,那么就必须知道匿名函数.其实看起来他们其实差不多一个意思. 见php RFC一句话:   End of 2007 a patch was  ...

  6. 中文分词工具jieba中的词性类型

    jieba为自然语言语言中常用工具包,jieba具有对分词的词性进行标注的功能,词性类别如下: Ag 形语素 形容词性语素.形容词代码为 a,语素代码g前面置以A. a 形容词 取英语形容词 adje ...

  7. Android基础之sqlite 数据库简单操作

    尽管很简单,但是也存下来,以后直接粘过去就能用了. public class DBHelper extends SQLiteOpenHelper {      private static final ...

  8. java常用正则校验工具类

    正则常用校验工具类 import java.util.regex.Pattern; /** * @program: * @description: 校验工具类 * @author: xujingyan ...

  9. U3D OnDrawGizmos

    private void OnDrawGizmos() { Debug.Log("OnDrawGizmos"); Gizmos.DrawWireSphere(this.transf ...

  10. EXADATA智能扫描

    提要:查询特定的要求:智能扫描只可用于完整的表或索引扫描.智能扫描只能用于直接路径读取: 直接路径读取会自动用于并行查询. 直接路径读取可以用于串行查询.默认情况下不使用它们进行小型表的串行扫描.使用 ...