27-Roman to Integer-Leetcode
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的更多相关文章
- 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 ...
- Roman to Integer [LeetCode]
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- Roman To Integer leetcode java
问题描述: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range fr ...
- LeetCode 13. 罗马数字转整数(Roman to Integer)
13. 罗马数字转整数 13. Roman to Integer 题目描述 罗马数字包含以下七种字符: I,V,X,L,C,D 和 M. 字符 数值 I 1 V ...
- 【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 ...
- [LeetCode][Python]Roman to Integer
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/roman-t ...
- 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 ,即 ...
- 【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 ...
- 【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 ...
- LeetCode:Roman to Integer,Integer to Roman
首先简单介绍一下罗马数字,一下摘自维基百科 罗马数字共有7个,即I(1).V(5).X(10).L(50).C(100).D(500)和M(1000).按照下述的规则可以表示任意正整数.需要注意的是罗 ...
随机推荐
- git为单独的仓库设置提交的用户名
在我们平时的学习中可能有这么一种需求,在公司进行开发的时候,一般会参与多个项目的开发,而项目提交代码时,一般请求情况下提供的用户都是同一个,而我们为了方便可能会使用全局进行git 用户名的配置.但是空 ...
- 热身训练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 ...
- Python之@property详解及底层实现介绍
转自:https://blog.csdn.net/weixin_42681866/article/details/83376484 前文 Python内置有三大装饰器:@staticmethod(静态 ...
- 攻防世界 杂项14.Erik-Baleog-and-Olaf
下载解压后用notepad++打开 发现是一个PNG的图片文件,该后缀,再用Stegsolve打开看一下, 发现一个残缺二维码,果断在线PS补全 扫码得到flag flag{#justdiffit}
- JVM:垃圾收集器与对象的"存活"问题
垃圾收集器垃圾收集(Garbage Collection,GC).当需要排查各种内存溢出.内存泄露问题时,当垃圾收集成为系统更高并发量的瓶颈时,我们需要去了解GC和内存分配. 检查对象的"存 ...
- Spring IOC(控制反转)和DI(依赖注入)原理
一.Spring IoC容器和bean简介 Spring Framework实现了控制反转(IoC)原理,IoC也称为依赖注入(DI). 这是一个过程,通过这个过程,对象定义它们的依赖关系,即它们使用 ...
- 字符串压缩 牛客网 程序员面试金典 C++ Python
字符串压缩 牛客网 程序员面试金典 C++ Python 题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串"aabcccccaaa"经压缩会变 ...
- Trap (陷入/中断) 源码解析
用户空间和内核空间之间的切换通常称为trap trap的三种形式 系统调用引发 异常发生 设备中断 (时间中断.IO中断.网络中断等) supervise mode的权限 用户态和内核态之间的到底有什 ...
- charles抓包修改请求参数发送新的请求
打开charles -->选择请求右击选择compose---修改参数发送请求
- k8s 测试环境搭建
# 安装kubectl https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux # 官方安装 ...