Given a roman numeral, convert it to an integer.

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

思路:先构造罗马与数字的映射,接着对给定的字符串从头开始进行最长匹配,最大为4,依次进行,匹配完成则乘以相应位的量级,时间复杂度为O(n)

#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <map>
#define IMIN numeric_limits<int>::min()
#define IMAX numeric_limits<int>::max()
#define FR(i,n) for(int i=0;i<n;i++)
#define CLC(x) memset(x,0,sizeof(x))
#define FILL(x,c) memset(x,c,sizeof(x))
using namespace std;
class Solution {
public:
int romanToInt(string s) {
map<string,int> mp[4];
init4(mp[3]);init3(mp[2]);init2(mp[1]);init1(mp[0]);
int n=s.size();
int res=0;
for(int i=0;i<n;++i)
{
int len = min(n-i,4);
int go_len = 0;
while(len)
{
string tmp(s,i,len);
int flag =0;
for(int j=3;j>=0;--j)
if(mp[j].count(tmp)){
go_len = len;
res+=pow(10,j)*mp[j][tmp];
flag = 1; break;
}
if(flag==1)break;
len--;
}
i = i+go_len-1;
}
cout<<res<<endl;
return res;
}
void init1(map<string,int> &mp)
{
mp[""]=0;
mp[string("I")]=1;mp[string("II")]=2;
mp[string("III")]=3;mp[string("IV")]=4;
mp[string("V")]=5;mp[string("VI")]=6;
mp[string("VII")]=7;mp[string("VIII")]=8;
mp[string("IX")]=9;
}
void init2(map<string,int> &mp)
{
mp[""]=0;
mp[string("X")]=1;mp[string("XX")]=2;
mp[string("XXX")]=3;mp[string("XL")]=4;
mp[string("L")]=5;mp[string("LX")]=6;
mp[string("LXX")]=7;mp[string("LXXX")]=8;
mp[string("XC")]=9;
}
void init3(map<string,int> &mp)
{
mp[""]=0;
mp[string("C")]=1;mp[string("CC")]=2;
mp[string("CCC")]=3;mp[string("CD")]=4;
mp[string("D")]=5;mp[string("DC")]=6;
mp[string("DCC")]=7;mp[string("DCCC")]=8;
mp[string("CM")]=9;
}
void init4(map<string,int> &mp)
{
mp[string("M")]=1;mp[string("MM")]=2;
mp[string("MMM")]=3;
}
};
int main()
{
Solution s;
string str;
while(cin>>str)
cout<<s.romanToInt(str)<<endl;
return 0;
}

27-Roman to Integer-Leetcode的更多相关文章

  1. Roman to Integer -- LeetCode 13

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

  2. Roman to Integer [LeetCode]

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

  3. Roman To Integer leetcode java

    问题描述: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range fr ...

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

    13. 罗马数字转整数 13. Roman to Integer 题目描述 罗马数字包含以下七种字符: I,V,X,L,C,D 和 M. 字符        数值  I           1  V  ...

  5. 【LeetCode】12 & 13 - Integer to Roman & Roman to Integer

    12 - Integer to Roman Given an integer, convert it to a roman numeral. Input is guaranteed to be wit ...

  6. [LeetCode][Python]Roman to Integer

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/roman-t ...

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

  8. 【LeetCode】Roman to Integer & Integer to Roman

    Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within t ...

  9. 【leetcode】Integer to Roman & Roman to Integer(easy)

    Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within t ...

  10. LeetCode:Roman to Integer,Integer to Roman

    首先简单介绍一下罗马数字,一下摘自维基百科 罗马数字共有7个,即I(1).V(5).X(10).L(50).C(100).D(500)和M(1000).按照下述的规则可以表示任意正整数.需要注意的是罗 ...

随机推荐

  1. 热身训练1 Game

    http://acm.hdu.edu.cn/showproblem.php?pid=5242 简要题意: 一棵树有n个节点,每个节点x有一个权值wi,我们要从根节点出发(不可回头),去收集每个节点的权 ...

  2. kail入侵xp实例

    Kali的IP地址是192.168.0.112 Windows XP的IP地址是192.168.0.108 本文演示怎么使用Metasploit入侵windows xp sp3. 启动msfconso ...

  3. 【JavaScript】JS的坚实基础

    前言 ​ 考虑到在后面的开发中,需要大量的使用js语言去进行开发,所以准备重新规整一下javascript的知识点,专门开了一个js的专栏,用来复习一下js语言.万事开头难,要是后面写的有问题的,欢迎 ...

  4. 【Java】 List和Array转换

    List转Array toArray 首先展示初学者容易犯的错误示例 List<String> strList = new ArrayList<>(); strList.add ...

  5. 谷粒 | 18 | Hystrix熔断器

    Spring Cloud调用接口过程 Spring Cloud 在接口调用上,大致会经过如下几个组件配合: Feign ----->Hystrix ->Ribbon ->Http C ...

  6. Java多线程 | 02 | 线程同步机制

    同步机制简介 ​ 线程同步机制是一套用于协调线程之间的数据访问的机制.该机制可以保障线程安全.Java平台提供的线程同步机制包括: 锁,volatile关键字,final关键字,static关键字,以 ...

  7. [python]Appium+python +pytest 实现APP自动化,基于安卓

    1.安卓环境搭建 &关于app自动化,个人觉得安装过程比较复杂,脚本难度实现和web自动化差不多封装关键字即可,因此,下面会写安装.启动APP以及过程中遇到的一些坑(这一篇偏向解释给个人) & ...

  8. java框架面试高频问题(SpringMVC)

    1.SpringMVC是什么? 请说出你对它的理解? SpringMVC是Spring将Web层基于MVC封装后的框架. 在没有SpringMVC之前,Web层的Servlet负责的事情很多,很杂.  ...

  9. Part 19 AngularJS Services

    What is a service in AngularJSBefore we talk about what a service is in Angular. Let's talk about a ...

  10. Node http

    要开发HTTP服务器程序,从头处理TCP连接,解析HTTP是不现实的.这些工作实际上已经由Node.js自带的http模块完成了.应用程序并不直接和HTTP协议打交道,而是操作http模块提供的req ...