力扣面试经典算法150题:罗马数字转整数

罗马数字转整数

今天的题目是力扣面试经典150题中的数组的简单题: 罗马数字转整数

题目链接:https://leetcode.cn/problems/roman-to-integer/description/?envType=study-plan-v2&envId=top-interview-150

题目描述

将一个罗马数字转换成相应的整数。输入是一个有效的罗马数字字符串,输出是对应的整数值。
罗马数字包含以下七种字符: I, V, X, L, C, D 和 M。

字符数值
I1
V5
X10
L50
C100
D500
M1000
  • 示例:
    • 输入:
      “III”
    • 输出:
      3
    • 输入:
      “IV”
    • 输出:
      4
    • 输入:
      “IX”
    • 输出:
      9
    • 输入:
      “LVIII”
    • 输出:
      58
    • 输入:
      “MCMXCIV”
    • 输出:
      1994

题目分析

罗马数字的转换规则:正常情况下,字符代表的数值相加得到最终结果;特殊情况下,如果较小的数字出现在较大的数字前面,则从较大的数字中减去较小的数字。

简单分析一下:

  1. 以5为分隔时(1-5,5-10,实际间隔是4),间隔在1-3时使用I叠加,间隔为4时在下级符号V/X前加I。
  2. 以50为分隔时(10-50,50-100,实际间隔是40),间隔在10-30使用X叠加,间隔为40时在下级符号L/C前加X。
  3. 以500为分隔时(100-500,500-1000,实际间隔是400),间隔在100-300使用C叠加,间隔为400时在下级符号D/M前加C。

针对这种情况,我们可以总结一下,如果当前位罗马字符对应的值小于下一位罗马字符对应的值,那么就应该先减去当前位罗马字符,如果大于或者没有下一位罗马字符,则说明符合正常的累加规则,直接相加即可。比如IV = -10 + 50,更多的例子大家可以往后举例并归纳。

实际通过大量例子找规律,再使用代码实现这个规律就是在编写算法,就像我们高中学的数列一下。

个人理解不喜吻喷。

最后由于题目只给到1000的对应罗马值,输入的罗马字符的值应该限制在3999以内。

解题思路

这个题目没有想到特别的算法来解答,目前就考虑暴力破解。

暴力破解的思路如下:

  1. 使用哈希表存储罗马数字及其对应的整数值。
  2. 从左到右遍历字符串,检查当前字符与下一个字符的值的大小。
  3. 如果当前字符的值小于下一个字符的值,则从结果中减去当前字符的值; 否则,加上当前字符的值。

最终得到的整数值即为结果。

实际算法代码

根据以上分析,我们可以写出以下代码:

import java.util.HashMap;
import java.util.Map;public class RomanToInteger {public static void main(String[] args) {RomanToInteger solution = new RomanToInteger();// 示例数据String romanNumeral = "MCMXCIV";// 调用转换方法int integerResult = solution.romanToInt(romanNumeral);// 输出结果System.out.println("The integer value of the Roman numeral " + romanNumeral + " is: " + integerResult);}/*** 将罗马数字转换为整数** @param s 输入的罗马数字字符串* @return 对应的整数值*/public int romanToInt(String s) {Map<Character, Integer> romanValues = new HashMap<>();romanValues.put('I', 1);romanValues.put('V', 5);romanValues.put('X', 10);romanValues.put('L', 50);romanValues.put('C', 100);romanValues.put('D', 500);romanValues.put('M', 1000);int result = 0;for (int i = 0; i < s.length(); i++) {char currentChar = s.charAt(i);int currentValue = romanValues.get(currentChar);if (i + 1 < s.length() && currentValue < romanValues.get(s.charAt(i + 1))) {result -= currentValue;} else {result += currentValue;}}return result;}
}

结果

没有意外,执行函数正常返回:

在这里插入图片描述

提交到力扣也是没有问题:

在这里插入图片描述

总结

今天的题目没有特别的算法,纯粹的暴力解答。主要的还是举例观察总结规律并用代码体现即可,毕竟现在都是简单题目。

加油!!!

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

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

相关文章

Docker 日志管理

一、ELK -Filebeat Elasticsearch 数据的存储和检索 常用端口&#xff1a; 9100&#xff1a;elasticsearch-head提供web访问 9200&#xff1a;elasticsearch与其他程序连接或发送消息 9300&#xff1a;elasticsearch集群状态 Logstash 有三个组件构成input&#xff0c;fi…

QT输入组、QT显示组

目录 QT输入组 ​编辑 Combo Box&#xff08;下拉菜单部件&#xff09; Font Combo Box&#xff08;显示系统中可用的字体&#xff09; Line Edit&#xff08;行编辑器&#xff09; Text Edit&#xff08;文本编辑器&#xff09; Plain Text Edit&#xff08;纯文本编辑…

MySQL基础练习题39-商品销售明细表1

目录 题目 准备数据 分析数据 总结 题目 求2024-01-01 每个门店 每个商品 的 销售单量, 销售数量, 销售金额, 线上单量, 线下单量 准备数据 -- 创建库 create database db_2; use db_2;-- 创建商品销售明细(核销)天表 CREATE TABLE dwm_sold_goods_sold_dtl_i (trade_da…

Apple 智能基础语言模型

Introducing Apple’s On-Device and Server Foundation Models technical details June 10, 2024 在2024年的全球开发者大会上&#xff0c;苹果推出了Apple Intelligence&#xff0c;这是一个深度集成到iOS 18、iPadOS 18和macOS Sequoia中的个人智能系统。Apple Intelligen…

25届秋招网络安全面试资料库

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

步进电机驱动笔记1:STM32+DRV8825模块_初步驱动42步进电机

今日学习使用STM32 F103C8T6 与DRV8825模块 驱动42步进电机 本文就简单地用单片机驱动一下&#xff0c;不去了解更深层次的东西&#xff0c;只求能转就行的那种... 文章提供测试代码讲解、完整工程下载、测试效果图 目录 需要准备的模块&#xff1a; DRV8825步进电机驱动器​…

8G显存玩转书生大模型

基础任务 使用 Cli Demo 完成 InternLM2-Chat-1.8B 模型的部署&#xff0c;并生成 300 字小故事&#xff0c;记录复现过程并截图。 尝试很多方法无解后在网页端重新输入&#xff1a; import torch from transformers import AutoTokenizer, AutoModelForCausalLM使用了Tran…

科普| 网络安全知多少?什么是网络安全?网络安全为何重要?

古语有云&#xff1a;“千里之堤&#xff0c;溃于蚁穴。” 此言非但道出了细微之处见真章的哲理&#xff0c;亦在今日之世&#xff0c;隐隐映射出网络安全之于国家、社会乃至个人生活的重要性。 在数字化浪潮汹涌澎湃的今天&#xff0c;网络已如血脉般渗透进每一个角落&#…

C:每日一题:单身狗

​​​​ 一、题目&#xff1a; 在一个整型数组中&#xff0c;只有一个数字出现一次&#xff0c;其他数组都是成对出现的&#xff0c;请找出那个只出现一次的数字。 整型数组 int arr[ ] {1,1,2,2,3,4,4} 二、思路分析&#xff1a; 1.&#xff0c;明确目标&#xff0c;选择…

C++相关内容模块

C相关内容模块 单例模式&#xff0c;实现创建类中的对象&#xff0c;保证该类只能实例化一个唯一的对象 单例模式&#xff0c;实现创建类中的对象&#xff0c;保证该类只能实例化一个唯一的对象 #define _CRT_SECURE_NO_WARNINGS // 抑制 C4996 警告 #include<iostream>…

8月echarts记录-雷达图tooltip实现单轴显示、解决柱状/折线图点击非图表图形元素不会触发事件、多柱形图点击选中改变背景颜色等

8月echarts记录-雷达图tooltip实现单轴显示、解决柱状/折线图点击非图表图形元素不会触发事件、柱形图点击选中改变背景颜色等 雷达图tooltip实现单轴显示问题描述解决方案 解决柱状/折线图点击非图表图形元素不会触发事件问题描述解决方案1. 使用API convertFromPixel和getZr实…

Redis17-服务端优化

目录 持久化配置 慢查询 什么是慢查询 如何查看慢查询 命令及安全配置 内存配置 集群优化 持久化配置 Redis的持久化虽然可以保证数据安全&#xff0c;但也会带来很多额外的开销&#xff0c;因此持久化请遵循下列建议&#xff1a; 用来做缓存的Redis实例尽量不要开启持…

一文讲清三极管

说明 下图是一个NPN型的三极管 由于发射极正偏,发射极的多数载流子(无论是P的空穴还是N的自由电子)会不断扩散到基极,并不断从电源补充多子,形成发射极电流IE。由于基极很薄,且基极的多子浓度很低,所以从发射极扩散过来的多子只有很少一部分和基极的多子复合形成基极电…

进程waitwaitpid、线程

一、wait wait功能 1、获取子进程退出状态&#xff0c;分析子进程是否已经退出&#xff08;变成僵尸态&#xff09; 2、回收资源&#xff0c;让僵尸态子进程销毁 wait本身是一个阻塞操作&#xff0c;会使调用者阻塞 2、宏&#xff1a; &#xff08;1&#xff09;WIFEXITE…

加密软件排行榜前五名,为你的数据安全保驾护航

加密软件成为了保护数据中不可缺少的一部分&#xff0c;这是一个重要的存在&#xff0c;能够保护机密文件&#xff0c;防止泄密。加密软件就是专门用于保护数据安全的&#xff0c;近年来多个加密软件的出现&#xff0c;使用户在挑选加密软件时多了一些选择&#xff0c;同时也成…

坐牢第二十五天20240813(网络通信)

一、TCP机械臂测试 通过w(红色臂角度增大)s&#xff08;红色臂角度减小&#xff09;d&#xff08;蓝色臂角度增大&#xff09;a&#xff08;蓝色臂角度减小&#xff09;按键控制机械臂 注意&#xff1a;关闭计算机的杀毒软件&#xff0c;电脑管家&#xff0c;防火墙 1&#x…

小阿轩yx-Docker Compose与私有仓库部署

小阿轩yx-Docker Compose 与私有仓库部署 Docker 的网络模式 Docker 四种网络模式 网络模式参数说明host 模式- - nethost 容器和宿主机共享 Network namespace container 模式- - net{id} 容器和另外一个容器共享 Network namespace。 kubernetes 中的pod就是多个容器共享一…

于博士Cadence视频教程学习笔记备忘

标签&#xff1a;PCB教程 PCB设计步骤 cadence教程 Allegro教程 以下是我学习该视频教程的笔记&#xff0c;记录下备忘&#xff0c;欢迎大家在此基础上完善&#xff0c;能回传我一份是最好了&#xff0c;先谢过。 备注&#xff1a; 1、未掌握即未进行操作 2、操作软件是15.…

论文阅读笔记:ST-MetaNet-2

目录 预备知识 定义1&#xff1a;城市交通 定义2&#xff1a;Geo-graph属性 问题1 方法 RNN 元学习器 元图注意力网络 元循环神经网络 预备知识 在本节中&#xff0c;我们介绍定义和问题陈述。为简洁起见&#xff0c;我们在表1中提供了一个注释表。 假设有个位置&…

40.【C语言】指针(重难点)(E)

目录 13.指针的使用和传址调用 14.数组名的理解 *数组名就是数组首元素的地址 *两个例外 *使用指针访问数组 *一维数组的传参本质 往期推荐 承接上篇39.【C语言】指针&#xff08;重难点&#xff09;&#xff08;D&#xff09; 13. 指针的使用和传址调用 见29.【C语言】函数系…