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. reactnative实现qq聊天消息气泡拖拽消失效果

    前言(可跳过) 我在开发自己的APP时遇到了一个类似于qq聊天消息气泡拖拽消息的需求,因为在网上没有找到相关的组件,所以自己动手实现了一下 需求:对聊天消息气泡拖拽到一定长度松开时该气泡会消失(可自行 ...

  2. 实验6:开源控制器实践——RYU

    实验目的 能够独立部署RYU控制器 能够理解RYU控制器实现软件定义的集线器原理 能够理解RYU控制器实现软件定义的交换机原理 二.实验环境 下载虚拟机软件Oracle VisualBox或VMwar ...

  3. 一步一步学ROP之linux_x64篇(蒸米spark)

    目录 一步一步学ROP之linux_x64篇(蒸米spark) 0x00 序 0x01 Memory Leak & DynELF - 在不获取目标libc.so的情况下进行ROP攻击 0x02 ...

  4. IDEA免费激活至2099年教程,亲测可用

    申明,本教程 Intellij IDEA 最新版激活教程,激活码均收集与网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除.如条件允许,建议大家购买正版. 以下是本人免费激活到 2099 年的 ...

  5. centos7 二进制安装mysql-8.0.19

    安装包下载地址:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz 1.检 ...

  6. css 跑马灯加载特效

    css 跑马灯加载特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=

  7. Java 代码执行流程

    Java 代码执行流程 类加载过程 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载 类加载时机:代码使用到这个类时 验证阶段 &qu ...

  8. 高德地图API中折线polyline不能跨越180度经度线的解决方案

    1.问题 最近在使用高德地图的API,有一个需求是画出对象的历史轨迹,采用了高德地图API中的折线polyline函数.但如果需要跨180度经度线的折线,会出现不能跨越的情况,如下图所示: 图中有三个 ...

  9. LINKERD 2.11 中文实战手册

    1. 将您的服务添加到 Linkerd. 为了让您的服务利用 Linkerd,它们还需要通过将 Linkerd 的数据平面代理注入到它们的 pod 中来进行 网格化 . 2. 自动化的金丝雀发布. 通 ...

  10. ES6基础知识(async 函数)

    1.async 函数是什么?一句话,它就是 Generator 函数的语法糖. const fs = require('fs'); const readFile = function (fileNam ...