当前位置: 首页 > news >正文

leetcode07-罗马数字的转换

题目链接:

https://leetcode.cn/problems/roman-to-integer/?envType=study-plan-v2&envId=programming-skills

思路:

将罗马数字与数值的映射关系先存在一个哈希表中;

对于罗马数字,若前一个罗马数字映射的值小于后一个所映射的值,则数值应该减去前一个罗马数字映射的数值,反之则加上。遍历字符串s,重复上述操作。

代码:
 

class Solution {public int romanToInt(String s) {//构建哈希表的映射关系Map<Character,Integer> map = new HashMap<Character,Integer>();map.put('I',1);map.put('V',5);map.put('X',10);map.put('L',50);map.put('C',100);map.put('D',500);map.put('M',1000);int sum = 0;//记录总和int n = s.length();int prevalue = map.get(s.charAt(0));for(int i = 1;i<n;i++){int value = map.get(s.charAt(i));if(prevalue<value) {sum-=prevalue;}else {sum+=prevalue;}prevalue = value;}sum+=prevalue;return sum;}
}

执行速度:5ms  内存占用:43.73MB 

将哈希表的映射关系改为采用函数实现,可以大大减少执行速度

优化后的代码:
 

class Solution {public static int get(char c) {switch(c) {case 'I':return 1;case 'V':return 5;case 'X':return 10;case 'L':return 50;case 'C':return 100;case 'D':return 500;case 'M':return 1000;default:return 0;}
}public int romanToInt(String s) {//构建哈希表的映射关系int sum = 0;//记录总和int n = s.length();int prevalue = get(s.charAt(0));for(int i = 1;i<n;i++){int value = get(s.charAt(i));if(prevalue<value) {sum-=prevalue;}else {sum+=prevalue;}prevalue = value;}sum+=prevalue;return sum;}
}

执行速度: 2ms  占用内存:43.57MB

相关文章:

  • 盛最多水的容器【双指针】
  • 数据结构OJ实验14-哈希查找
  • Redisson依赖冲突记录
  • STC进阶开发(三)蜂鸣器、RTC时钟、I2C总线、外部中断、RTC闹钟设置、RTC计时器设置
  • C语言——指针
  • 百度吉利合作造车生态,极越“智价比”能否带来科技平权?
  • 数据库管理-第127期 LSM Tree(202301225)
  • openFeign服务调用
  • 惊人技术!重新定义人机互动:深入了解神经链接的脑机接口技术
  • Android studio 花式按键
  • 【AIGC-图片生成视频系列-6】SSR-Encoder:用于主题驱动生成的通用编码器
  • Golang高质量编程与性能调优实战
  • 分类模型评估方法
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建并初始化TcpServer实例 以及 启动
  • C#编程-使用集合
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【译】理解JavaScript:new 关键字
  • Cumulo 的 ClojureScript 模块已经成型
  • DOM的那些事
  • JavaScript-Array类型
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Linux Process Manage
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 力扣(LeetCode)357
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 你真的知道 == 和 equals 的区别吗?
  • 通过几道题目学习二叉搜索树
  • 一天一个设计模式之JS实现——适配器模式
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (10)STL算法之搜索(二) 二分查找
  • (8)STL算法之替换
  • (二)fiber的基本认识
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (算法)前K大的和
  • (一)Dubbo快速入门、介绍、使用
  • (转)visual stdio 书签功能介绍
  • (转载)虚函数剖析
  • .net6 webapi log4net完整配置使用流程
  • .net经典笔试题
  • .net开发时的诡异问题,button的onclick事件无效
  • .net连接MySQL的方法
  • .net与java建立WebService再互相调用
  • @Builder用法
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [<事务专题>]
  • [20150707]外部表与rowid.txt
  • [AIGC] 如何建立和优化你的工作流?
  • [APUE]进程关系(下)
  • [AX]AX2012 R2 出差申请和支出报告
  • [EFI]DELL XPS13 9360电脑 Hackintosh 黑苹果efi引导文件