[Leetcode] Roman to integer 罗马数字转成整数
2024-08-23 14:08:53
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路:有关罗马数字的相关知识可见博客Integer to roman。从左往右遍历字符串,比较当前为和下一位的值,若是当前数字比下一位大,或者当当前数字为最后时,则加上当前数字,否则减去当前数字。这就遇到一个问题,罗马数字的字符串不是按26个字母顺序来的,如何确定大小。解决办法一:写一个函数,将罗马数字转换成整数,然后进行比较;解法二,可以使用map数据结构,将罗马数字的字母转换成对应的整数值。
方法一的代码如下:
class Solution {
public:
int romanToInt(string s)
{
int res=; //记得初始化
for(int i=;i<s.size();++i)
{
if(i==s.size()-||strToNum(s[i])>=strToNum(s[i+]))
res+=strToNum(s[i]);
else
res-=strToNum(s[i]);
}
return res;
} int strToNum(const char c)
{
int num=;
switch(c)
{
case 'M':
num=;
break;
case 'D':
num=;
break;
case 'C':
num=;
break;
case 'L':
num=;
break;
case 'X':
num=;
break;
case 'V':
num=;
break;
case 'I':
num=;
break;
default:
num=;
}
return num;
}
};
方法二:
class Solution {
public:
int romanToInt(string s) {
int res = ;
unordered_map<char, int> m{{'I', }, {'V', }, {'X', }, {'L', }, {'C', }, {'D', }, {'M', }};
for (int i = ; i < s.size(); ++i)
{ if (i == s.size() - || m[s[i]] >= m[s[i+]])
res += m[s[i]];
else
res -= m[s[i]];
}
return res;
}
};
最新文章
- java中HashMap重要性质和优化总结
- [c++] vector的使用
- java操作excel文件
- 最短路径--SPFA 算法
- (一) 从零开始搭建Spark Standalone集群环境搭建
- php,javscript调用百地图度API实现标记
- SQL Server查询所有用户表
- 04_XML_04_XMLDTD语法
- BDIA增强
- 关闭HTC手机充电时屏幕一直亮着绿色电池的办法
- rsync+inotify实现数据的实时备份
- (1)Phonics自然拼读 英语动画 Fun with Phonics 国际主流英语教学法
- node.js vue-axios和vue-resource
- 【C++ 实验5 类和对象】
- git学习笔记——廖雪峰git教程
- JAVA常用的异常处理情况
- Java 解决 servlet 接收参数中文乱码问题
- 解决Android4.3版本下,手机短彩接收中文文件名附件,中文名字的附件无法保存(第二步:解决从从数据库中读取附件文件名,并在长按后保存附件时,中文乱码导致的无法保存附件)
- Elasticsearch系列(五)----JAVA客户端之TransportClient操作详解
- spring4声明式事务&mdash;02 xml配置方式