LeetCode150道面试经典题--罗马数字转整数(简单)

news2024/9/23 7:31:26

 

目录

1.题目

2.示例

3.思路

4.案例代码(Java)


1.题目

罗马数字包含以下七种字符: 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。

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


2.示例

示例1:

输入: s = "III"
输出: 3

示例2:

输入: s = "IV"
输出: 4

 示例3:

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

示例4:

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


3.思路

通过HashMap存储每一个字符与其相对于的值,然后观察字符串可以发现,当前一个字符小于后面字符时候就相减,其他时候就相加。并且减法只出现在左边。所以最后一个值直接相加即可


4.案例代码(Java)

LeetCode代码:

class Solution {
    public int romanToInt(String s) {
     char strs[] = s.toCharArray();
        int sum = 0;
        Map<Character, Integer> maps = new HashMap<Character, Integer>();
        maps.put('I',1);
        maps.put('V',5);
        maps.put('X',10);
        maps.put('L',50);
        maps.put('C',100);
        maps.put('D',500);
        maps.put('M',1000);
        int preNum = maps.get(strs[0]);

        for (int i=1;i<strs.length;i++){
            if (maps.get(strs[i])>preNum){
                sum -= preNum;
            }else {
                sum += preNum;
            }
            preNum = maps.get(strs[i]);
        }
        sum += preNum;
        return sum;
    }
}

时间复杂度O(n),空间复杂度O(1)

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

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

相关文章

UE 5 GAS Gameplay Ability System

游戏技能系统 简称&#xff08;GAS&#xff09;&#xff0c;是一个健壮的&#xff0c;高度可扩展的gameplay框架&#xff0c;通常用于构件RPG、MOBA等游戏的完整战斗逻辑框架。 通过GAS&#xff0c;可以快速地制作游戏中的主动/被动技能、各种效果Buff、计算属性伤害、处理玩家…

openGauss学习笔记-31 openGauss 高级数据管理-索引

文章目录 openGauss学习笔记-31 openGauss 高级数据管理-索引31.1 语法格式31.2 参数说明31.3 示例 openGauss学习笔记-31 openGauss 高级数据管理-索引 索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。 索引可以用来提高数据库查询性能&…

我在VScode学Java多态(Java多态、instanceof)

Java的多态&#xff08;Polymorphism&#xff09;是面向对象编程中的一种特性&#xff0c;它允许不同的对象能够以统一的方式进行访问和操作。它允许一个类的实例在运行时表现出多种形态。 Java多态的实现主要依赖于两个基本概念&#xff1a;继承和方法重写。在Java中&#xff…

程序员的趣闻:神奇Bug与不可思议的技术世界

文章目录 Bug本身情况发现Bug的过程怎么对待这个Bug其他感受 程序员的世界充满了各种离奇而又难以置信的趣闻&#xff0c;其中不乏那些令人目瞪口呆的神奇Bug。有时候&#xff0c;这些故事不仅令人捧腹大笑&#xff0c;还展现了技术世界的多姿多彩。让我们走进这个充满惊奇的领…

Java集合容器详解:ArrayList、LinkedList和HashMap、HashTable及其区别

文章目录 一、简介二、ArrayList详解2.1 动态数组2.2 扩容机制2.3 特点2.4 操作 三、LinkedList详解3.1 双向链表结构3.2 双向链表结构3.3 操作 四、HashMap详解4.1 概述4.2 内部实现4.2.1 哈希表结构4.2.2 散列冲突解决4.2.3 扩容机制 4.3 版本差异4.4 实操 五、HashTable5.1 …

安卓:LitePal操作数据库

目录 一、LitePal介绍 常用方法&#xff1a; 1、插入数据&#xff1a; 2、更新数据&#xff1a; 3、删除数据&#xff1a; 4、查询数据&#xff1a; 二、LitePal的基本用法&#xff1a; 1、集成LitePal&#xff1a; 2、创建LitePal配置文件&#xff1a; 3、创建模型类…

Vue+Vue Router+TailwindCss+Daisyui部署

一、构建Vue项目 > npm init vuelatest > cd <your-project-name> > npm install > npm run dev 二、设置IDEA JS版本 三、安装Tailwindcss Install Tailwind CSS with Vite - Tailwind CSS npm install -D tailwindcss postcss autoprefixer npx tai…

Linux下匿名管道简单模拟进程间通信

Linux下匿名管道简单模拟进程间通信 文章目录 Linux下匿名管道简单模拟进程间通信在这里插入图片描述1.引言2.具体实现2.1创建管道2.2创建子进程 && 通信(子进程写入)2.3关闭对应fd 3.结果 1.引言 ​ ​ 首先&#xff0c;管道是一种半双工的单向进程间通信方式&#…

有哪些简单的AI绘画软件?

随着人工智能技术的不断发展&#xff0c;越来越多的人工智能绘画软件出现了。人工智能绘画软件利用人工智能技术&#xff0c;通过计算机自动生成或辅助生成艺术作品。人工智能绘画软件通常集成了深度学习、计算机视觉和自然语言处理技术&#xff0c;可以模拟人类的创作过程&…

【数据结构与算法】十大经典排序算法-插入排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…

【Shell】基础语法(三)

文章目录 一、Shell基础语法1. 位置参数和特殊变量2. 输入输出3. 管道4. 文件重定向5. 函数6. 脚本调试方法 二、Shell高级和正则表达式1. sort命令2. uniq命令3. wc命令4. grep命令5. find命令6. xargs7. sed命令8. crontab 一、Shell基础语法 1. 位置参数和特殊变量 $0 …

循环队列详解

1. 循环队列 1.1 概念及结构 循环队列是一种特殊类型的队列数据结构&#xff0c;也被称为”唤醒缓冲器“。它在数组的基础上实现了循环利用空间的功能。在循环队列中&#xff0c;队尾和队头之间形成了一个循环&#xff0c;当队尾指针“追上”队头指针时&#xff0c;队列不再继…

IDEA设置Tabs多行显示的方法

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 前言 在开发的时候、不知不觉我们就会打开很多代码页。如果打开的页面…

在线原型设计工具有好用的吗?就是这10个

随着设计工作的不断发展&#xff0c;原型设计在设计工作中越来越重要&#xff0c;而在线原型设计工具在减轻了设计师工作负担的同时也提高了设计师的工作效率&#xff0c;今天本文将为大家推荐10个能在线使用的原型设计工具&#xff0c;一起来看看吧&#xff01; 1、即时设计 …

CDC 数据复制:技术、权衡、见解

推荐&#xff1a;使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景 在本文中&#xff0c;我将定义 CDC 数据复制&#xff0c;简要讨论最常见的用例&#xff0c;然后讨论常见技术及其权衡。最后&#xff0c;我将提供一些我作为数据集成公司Dataddo的首席执行官和创始人所学到…

使用logback异步打印日志

文章目录 一、介绍二、运行环境三、演示项目1. 接口2. 日志配置文件3. 效果演示4. 异步输出验证 四、异步输出原理五、其他参数配置六、源码分析1. 同步输出2. 异步输出 七、总结 一、介绍 对于每一个开发人员来说&#xff0c;在业务代码中添加日志是至关重要的&#xff0c;尤…

CSS:弹性盒子模型详解(用法 + 例子 + 效果)

目录 弹性盒子模型flex-direction 排列方式 主轴方向换行排序控制子元素缩放比例缩放是如何实现的&#xff1f; 控制子元素的对其方式justify-content 横向 对齐方式align-items 纵向 对齐方式 align-content 多行 对齐方式 弹性盒子模型 flex-direction 排列方式 主轴方向 f…

webshell免杀项目-Auto-JSPwebshell(五)

Auto-JSPwebshell/jsp免杀/webshell免杀/自动生成 项目地址&#xff1a; https://github.com/G0mini/Bypass 具体使用请参考&#xff1a; https://mp.weixin.qq.com/s/9-__B0MBRSXHla6O0KU7Gg

PCB制造中铜厚度的重要性

电子产品中的PCB是现代电子设备中不可或缺的一部分。在PCB制造过程中&#xff0c;铜厚度是一个非常重要的因素。正确的铜厚度可以保证电路板的质量和性能&#xff0c;同时也影响着电子产品的可靠性和稳定性。 一般我们常见的铜厚有17.5um&#xff08;0.5oz&#xff09;&#x…