博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode-13-roman-to-integer
阅读量:5014 次
发布时间:2019-06-12

本文共 856 字,大约阅读时间需要 2 分钟。

LeetCode-13-roman-to-integer

一、问题描述

  将罗马数字转化成整数,数字范围在1到3999之间。

  这题比较坑的是罗马数字,具体描述可以参见百度百科:https://baike.baidu.com/item/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97/772296?fr=aladdin

二、问题实现

  思路比较简单,从前向后比较,如果前一个数大于等于后一个数,则将result和后面的数值相加,否则将result减去两倍前一个数,再加上后一个数(因为前一个数在之前已经加过一次,所以需要减两次)

int romanToInt(string s) {	unordered_map
m = { {'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000} }; if (s.size() == 0) return 0; int result = m[s.at(0)]; for (auto i = 1; i < s.size(); i++) { if (m[s.at(i-1)] >= m[s.at(i)]) result = result + m[s.at(i)]; else result = result + m[s[i]] - 2 * m[s[i-1]]; } return result;}

  感觉要是从后向前遍历可以减少运算次数,因为在遇到减的时候不需要加一次再减两次。但是懒得写了。

  测试代码:

int main(){  string s = "DCXXI";  cout << romanToInt(s) << endl;  system("pause");  return 0;}

  输出结果为:621

转载于:https://www.cnblogs.com/likaiming/p/8072432.html

你可能感兴趣的文章
DOCKER 从入门到放弃(五)
查看>>
Python 多线程学习
查看>>
appcan官方ajax
查看>>
获取NVIDIA显卡的温度
查看>>
Dijkstra算法
查看>>
Deep Learning 9: Performance
查看>>
面试题61 把二叉树打印成多行
查看>>
C#例子 易懂故事 接口 委托 事件 异步通知 好玩.
查看>>
[转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...
查看>>
修改presto新版源码让他支持redash数据库
查看>>
Javascript的书写位置
查看>>
树-线索二叉树
查看>>
JAVA遇见HTML——Servlet篇:Servlet基础
查看>>
第二章 Vue快速入门--20 品牌案例-完成品牌列表的添加功能+ 21 品牌案例-根据Id完成品牌的删除...
查看>>
Java单例模式
查看>>
重温WCF之消息契约(MessageContract)(六)
查看>>
Excel2007制作直方图和正态分布曲线图
查看>>
android adb常用指令
查看>>
Android框架之路——GreenDao3.2.2的使用
查看>>
类方法WCF学习笔记-KnowTypeAttribute用法
查看>>