【Javascript - 力扣每日一题】13. 罗马数字转整数

news/2024/11/22 21:51:12/

题目描述

罗马数字包含以下七种字符: I, V, X, L,C,D 和 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

输入: s = “III”
输出: 3

示例 2

输入: s = “IV”
输出: 4

示例 3

输入: s = “IX”
输出: 9

示例 4

输入: s = “LVIII”
输出: 58
解释: L = 50, V= 5, III = 3.

示例 5

输入: s = “MCMXCIV”
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

1 <= s.length <= 15
s 仅含字符 (‘I’, ‘V’, ‘X’, ‘L’, ‘C’, ‘D’, ‘M’)
题目数据保证 s 是一个有效的罗马数字,且表示整数在范围 [1, 3999] 内
题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。
IL 和 IM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX 。
关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics 。

解题思路

遍历字符串s,将每个字符对应的数字加起来,如果当前字符表示的数字比上一个字符表示的数字大,则需要减去上一个字符的数字。

/*** @param {string} s* @return {number}*/
var romanToInt = function(s) {const map = new Map([["I",1],["V",5],["X",10],["L",50],["C",100],["D",500],["M",1000]])    let res = 0let lastNum = 0for(let i =0 ;i <s.length;i++) {let num = map.get(s[i])if(num>lastNum) {res -= lastNum} else {res += lastNum}lastNum = num }res += lastNumreturn res
};

在这里插入图片描述


http://www.ppmy.cn/news/45766.html

相关文章

如何提高代码能力:程序员的成长之路(下)

继续上篇 6. 持续学习和自我提升 技术行业日新月异&#xff0c;作为程序员需要不断学习和自我提升&#xff0c;以跟上技术的发展潮流&#xff0c;并不断提高自己的代码能力。以下是一些持续学习和自我提升的建议&#xff1a; a. 学习新技术和工具&#xff1a;保持对新技术和…

SpringMVC 01 -SpringMVC入门

高效学习习惯啊 坚持&#xff0c;比如这样经常更新博客&#xff0c;保持学习哈哈哈 SpringMVC-SpringMVC引入 1 SpringMVC引入1.1 引言1.2 MVC架构1.2.1 概念1.2.2 好处 1.2.3 执行流程【重点】 2 快速入门2.1 导入依赖2.2 配置核心(前端)控制器2.3 springmvc核心配置文件2.4 …

FastDeploy:PaddleSeg C++部署方式(一)

1.FastDeploy介绍 ⚡️FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具&#xff0c; 支持云边端部署。提供超过 &#x1f525;160 Text&#xff0c;Vision&#xff0c; Speech和跨模态模型&#x1f4e6;开箱即用的部署体验&#xff0c;并实现&#x1f51a;端到端…

iot-Scada免费Scada组态软件系列教程4-二次开发与版本部署

iot-Scada免费Scada组态软件系列教程 系列文章目录 iot-Scada免费Scada组态软件系列教程1-初识iot-Scada iot-Scada免费Scada组态软件系列教程2-架构设计 iot-Scada免费Scada组态软件系列教程3-各模块详细介绍 iot-Scada免费Scada组态软件系列教程4-二次开发与版本部署 前言…

LeetCode 1147. 段式回文

LeetCode 1147. 段式回文 难度&#xff1a; h a r d \color{red}{hard} hard 题目描述 你会得到一个字符串 t e x t text text 。你应该把它分成 k k k 个子字符串 ( s u b t e x t 1 , s u b t e x t 2 &#xff0c; … &#xff0c; s u b t e x t k ) (subtext1, subte…

【打卡】图像检索与重复图像识别1,2

Part4 图像检索与匹配 背景介绍 随着互联网上的图像数量不断增长&#xff0c;图像检索和匹配技术已成为许多视觉搜索引擎的核心技术&#xff0c;能够提高搜索结果的准确性和覆盖范围。图像检索和匹配是计算机视觉领域的重要研究方向之一&#xff0c;其主要目的是从大规模的图…

【一起啃书】《机器学习》第四章决策树

第四章 决策树 4.1 基本流程 决策树是一类常见的机器学习方法&#xff0c;是基于树结构来进行决策的&#xff0c;通过对训练样本的分析来确定划分属性&#xff0c;来模拟人类决策过程。 一般的&#xff0c;一棵决策树包含一个根结点、若干个内部结点和若干个叶结点&#xff0c;…

MSVC Debug 与 Release 库

CMake Debug后缀 set_target_properties(liba PROPERTIES DEBUG_POSTFIX "d") 或者 set(CMAKE_DEBUG_POSTFIX "d") 这样生成的库或者exe程序名会多一个d字符。如下链接 vc 运行时库 通过/MD、/MT 可以改变MSVC运行库&#xff0c; /MD代表使用动态运行时…