力扣由浅至深 每日一题.03 罗马数字转整数

别灰心,好运早晚会降临的

                        —— 24.3.11

13. 罗马数字转整数

简单题

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。

方法一 暴力遍历法

我们先发现 这里所有的数字都可以用罗马数字表示 

1        Ⅰ,2        Ⅱ,3        Ⅲ,        4        Ⅳ,5        Ⅴ,……,9        Ⅸ

思路

第一次遍历一个字符把符合值加到结果里,第二次遍历两个字符从结果中减去符合值。

Tips:charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。

语法:public char charAt(int index)

参数:index -- 字符的索引。        返回值:返回指定索引处的字符。

class Solution {public int romanToInt(String s) {int result = 0;for(int i = 0; i < s.length(); i++) {switch(s.charAt(i)) {case 'I': result += 1;break;case 'V': result += 5;break;case 'X':result += 10;break;case 'L':result += 50;break;case 'C':result += 100;break;case 'D':result += 500;break;case 'M':result += 1000;break;}}for(int j = 0; j < s.length() - 1; j++) {switch("" + s.charAt(j) + s.charAt(j+1)) {case "IV":case "IX":result -= 2;break;case "XL":case "XC":result -= 20;break;case "CD":case "CM":result -= 200;break;}}return result;}
}

方法二、直接switch对每一种情况都进行判断

思路

对传入的字符串转换为字符数组,对字符数组的每一位进行switch判断,由于已知当小的罗马数字出现在大的罗马数字左边,即是减法,出现在右边,即是加法,所以我们可以对字符数组的第i位和下一位第i+1位进行判断,然后根据switch的分组进行分类求和

Tips:Java中的Sring.toCharArray()方法是将字符串转换为字符数组的方法。它可以将一个字符串中的每个字符都放入一个字符数组中,并返回该字符数组。使用String.toCharArray()方法可以方便地对字符串中的每个字符进行操作,比如查找、替换、排序等

class Solution {public int romanToInt(String s) {int sum = 0;char[] chars = s.toCharArray();for(int i=0;i < chars.length;i++){switch(chars[i]){case 'I':sum+=1;break;case 'V':if(i>0 && chars[i-1] == 'I')sum+=3;else sum+=5;break;case 'X':if(i>0 && chars[i-1] == 'I')sum+=8;else sum+=10;break;case 'L':if(i>0 && chars[i-1] == 'X')sum+=30;else sum+=50;break;case 'C':if(i>0 && chars[i-1] == 'X')sum+=80;else sum+=100;break;case 'D':if(i>0 && chars[i-1] == 'C')sum+=300;else sum+=500;break;case 'M':if(i>0 && chars[i-1] == 'C')sum+=800;else sum+=1000;break;}}return sum;}
}

 方法三 从右向左遍历,用pre记录前一个结点,与当前进行判断

从右往左遍历,如果左边的下一个罗马数字代表的数大于这个数代表的罗马数字,则最终值加上左边的罗马数字代表的数值,如果左边的下一个罗马数字代表的数值小于当前的罗马数字代表的数,则数值-左边的罗马数字代表的数值

Tips:charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。

语法:public char charAt(int index)

参数:index -- 字符的索引。        返回值:返回指定索引处的字符。

class Solution {public int romanToInt(String s) {int sum=0;int pre=0;for(int i=s.length();i>0;i--){char a=s.charAt(i-1);int num=0;switch(a){case 'I':num=1;break;case 'V':num=5;break;case'X':num=10;break;case'L':num=50;break;case'C':num=100;break;case'D':num=500;break;case'M':num=1000;break;}if(num<pre){sum-=num;}else{sum+=num;}pre=num;}return sum;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 包装类:原始数据类型与迭代器

Java Iterator Iterator 接口提供了一种迭代集合的方法&#xff0c;即顺序访问集合中的每个元素。它支持 hasNext() 和 next() 方法&#xff0c;用于检查是否存在下一个元素以及获取下一个元素。 获取 Iterator 可以使用集合的 iterator() 方法获取 Iterator 实例&#xff1…

纯前端Web网页内嵌AutoCAD,支持在线编辑DWG、dxf等文档。

随着企业信息化的发展&#xff0c;越来越多的企业有网页在线浏览和编辑DWG文档&#xff08;AutoCad生成的文档&#xff09;的需求&#xff0c;但是新版浏览器纷纷取消了对NPAPI插件的支持&#xff0c;导致之前一些可以在线在线浏览和编辑DWG文档纷纷失效&#xff0c;今天推荐一…

【掌握版本控制:Git 入门与实践指南】操作仓库文件|分支管理

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;泥中に咲く—ウォルピスカーター 0:34━━━━━━️&#x1f49f;──────── 4:46 &#x1f504; ◀️ ⏸ ▶…

Effective C++ 学习笔记 条款25 考虑写出一个不抛异常的swap函数

swap是个有趣的函数。原本它只是STL的一部分&#xff0c;而后成为异常安全性编程&#xff08;exception-safe programming&#xff0c;见条款29&#xff09;的脊柱&#xff0c;以及用来处理自我赋值可能性&#xff08;见条款11&#xff09;的一个常见机制。由于swap如此有用&am…

揭秘反向代理:探索其神秘之处

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

141 Linux 系统编程18,线程,ps –Lf 进程 查看LWP,线程间共享数据,优缺点,编译加-lpthread,

一 线程概念 什么是线程 LWP&#xff1a;light weight process 轻量级的进程&#xff0c;本质仍是进程(在Linux环境下) 进程&#xff1a;独立地址空间&#xff0c;拥有PCB 线程&#xff1a;有独立的PCB&#xff0c;但没有独立的地址空间(共享) 区别&#xff1a;在于是否共…

【1688运营】如何拆解竞争对手店铺和单品数据?

关注竞争对手数据是1688运营中不可或缺的一环&#xff0c;它有助于企业更好地了解市场环境、发现市场机会、学习成功经验、预测市场变化以及提升竞争力。以下是一些建议&#xff0c;帮助你全面、深入地分析竞争对手的店铺和单品数据&#xff1a; 1、监控店铺数据 可以通过店雷…

Docker部署黑马商城项目笔记

部署后端 创建mysql目录如下&#xff0c;上传对应的文件 运行以下命令 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \-v ./mysql/data:/var/lib/mysql \-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entry…

mac redis启动,redis哨兵模式,redis集群的相关命令

Homebrew安装的软件会默认在/usr/local/Cellar/路径下 redis的配置文件redis.conf存放在/usr/local/etc路径下 cd /usr/local/Cellar/redis/7.0.10. 存在 cd /usr/local/opt/redis/bin/redis-server. 目录存在 cd /usr/local/etc/redis.conf 存在。配置文件 复制文件 cp …

深入浅出计算机网络 day.1 概论④ 计算机网络的定义和分类

不要退却&#xff0c;要绽放魅力 我的心会共鸣 和你 —— 24.3.9 一、计算机网络的定义 计算机网络早期的一个最简单定义 现阶段计算机网络的一个较好的定义 二、计算机网络的分类 按交换方式分类 按使用者分类 按传输介质分类 按覆盖范围分类 按拓扑结构分类&#xff0c;可…

2m高分辨率土地利用分类矢量数据/植被类型分布数据

土地利用数据是在根据影像光谱特征&#xff0c;结合野外实测资料&#xff0c;同时参照有关地理图件&#xff0c;对地物的几何形状&#xff0c;颜色特征、纹理特征和空间分布情况进行分析&#xff0c;建立统一解译标志的基础之上&#xff0c;依据多源卫星遥感信息&#xff0c;结…

细粒度IP定位参文2(Corr-SLG):A street-level IP geolocation method (2021年)

[2]S. Ding, F. Zhao, and X. Luo, “A street-level IP geolocation method based on delay-distance correlation and multilayered common routers,” Secur. Commun. Netw., vol. 2021, no. 1, pp. 1–10, 2021. 智能设备的地理位置可以帮助提供多媒体内容提供商和5G网络中…

数据结构中的堆(Java)

文章目录 把普通数组转换大顶堆数组堆增删改查替换堆排序 把普通数组转换大顶堆数组 该方式适用索引为0起点的堆 在堆&#xff08;Heap&#xff09;这种数据结构中&#xff0c;节点被分为两类&#xff1a;叶子节点&#xff08;Leaf Nodes&#xff09;和非叶子节点&#xff08;N…

如何防范企业内部安全威胁?

1 用户行为分析&#xff08;UEBA&#xff09; 现代化的用户行为分析产品具有多种优势功能&#xff0c;使企业能够有效地检测内部威胁。用户行为分析软件通过收集和分析来自各种来源的数据来分析和检测内部人员的可疑行为。这些来源包括网络日志和用户活动日志。通过检查这些数…

Spring事务及事务传播机制

目录 一、什么是事务 二、事务的操作 三、Spring下实现事务 1、Spring编程式事务 &#xff08;1&#xff09;事务提交 &#xff08;2&#xff09;事务回滚 2、Spring声明式事务 &#xff08;1&#xff09;无异常--提交 &#xff08;2&#xff09;异常且不捕获--回滚 …

电机特性学习

电机特性 电机堵转&#xff1a; 电机堵转的原理 玻璃升降器&#xff1a; 工作电压 升降器在 9V~16V 电压下应运行平稳,不允许有异音和卡滞现象。 工作电流 升降器的工作电流不大于 12A,堵转电流不大于 28A。 堵转 力 升降器 堵转 力应 不小于 212N。 玻璃升降器结构 电动车窗…

删除数据表

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 删除数据表属于数据库对象的操作 drop table 表名称; 删除 emp30 表 SQL> drop table emp30;表已删除。 上面这个语句运行后&#xff0c;就会把数据表 emp30 删除 在…

java-新手笔记(枚举)

枚举&#xff08;Enumeration&#xff09;是一种特殊的类&#xff0c;用于表示固定数量的常量值。 枚举类型使得代码更加清晰&#xff0c;易于维护&#xff0c;同时也增加了类型安全。 这边使用一个枚举封装重要数据 enum Day {SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FR…

Go语言必知必会100问题-22 空切片与nil切片有区别吗?

空切片与nil切片有区别吗&#xff1f; 很多开发人员经常混淆nil切片和空切片,不清楚什么时候使用空切片什么时候使用nil&#xff0c;而有些库函数又对这两者使用进行了区分。下面先来看看它们的定义。 空切片是length为0的切片当切片等于nil时为nil切片 下面是几种不同空切片…

salesforce || System.FinalException: Record is read-only Trigger.

以下是错误代码示范 会报错:System.FinalException: Record is read-only Trigger. trigger MoneyTrigger on Money__c (after insert, after update) {Date startDay = Date.newInstance(2023,12,26);if(Trigger.isAfter && Trigger.isInsert){for (Money__c moneys…