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. git为单独的仓库设置提交的用户名

    在我们平时的学习中可能有这么一种需求,在公司进行开发的时候,一般会参与多个项目的开发,而项目提交代码时,一般请求情况下提供的用户都是同一个,而我们为了方便可能会使用全局进行git 用户名的配置.但是空 ...

  2. 热身训练2 GCD

    题目描述 简要题意:  n个数字,a1,a2,...,an m次询问(l,r),每次询问需回答 1.gcd(al,al+1,al+2,...,ar);2.gcd(ax,ax+1,ax+2,...,ay ...

  3. Python之@property详解及底层实现介绍

    转自:https://blog.csdn.net/weixin_42681866/article/details/83376484 前文 Python内置有三大装饰器:@staticmethod(静态 ...

  4. 攻防世界 杂项14.Erik-Baleog-and-Olaf

    下载解压后用notepad++打开 发现是一个PNG的图片文件,该后缀,再用Stegsolve打开看一下, 发现一个残缺二维码,果断在线PS补全 扫码得到flag flag{#justdiffit}

  5. JVM:垃圾收集器与对象的"存活"问题

    垃圾收集器垃圾收集(Garbage Collection,GC).当需要排查各种内存溢出.内存泄露问题时,当垃圾收集成为系统更高并发量的瓶颈时,我们需要去了解GC和内存分配. 检查对象的"存 ...

  6. Spring IOC(控制反转)和DI(依赖注入)原理

    一.Spring IoC容器和bean简介 Spring Framework实现了控制反转(IoC)原理,IoC也称为依赖注入(DI). 这是一个过程,通过这个过程,对象定义它们的依赖关系,即它们使用 ...

  7. 字符串压缩 牛客网 程序员面试金典 C++ Python

    字符串压缩 牛客网 程序员面试金典 C++ Python 题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串"aabcccccaaa"经压缩会变 ...

  8. Trap (陷入/中断) 源码解析

    用户空间和内核空间之间的切换通常称为trap trap的三种形式 系统调用引发 异常发生 设备中断 (时间中断.IO中断.网络中断等) supervise mode的权限 用户态和内核态之间的到底有什 ...

  9. charles抓包修改请求参数发送新的请求

    打开charles -->选择请求右击选择compose---修改参数发送请求

  10. k8s 测试环境搭建

    # 安装kubectl https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux  # 官方安装 ...