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

news2024/9/21 9:20:56

罗马数字转整数

今天的题目是力扣面试经典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.coloradmin.cn/o/2037285.html

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

相关文章

面向未来的低代码开发:人工智能与机器学习的结合

引言 在当今飞速发展的数字化世界中&#xff0c;技术的进步正以前所未有的速度改变着各个行业的运营方式。其中&#xff0c;低代码开发和人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;这两大技术的结合&#xff0c;正在推动着软件开发领域的又一次变…

身份证OCR识别接口如何用Java调用

一、什么是身份证OCR识别接口&#xff1f; 身份证OCR识别接口又叫身份证识别&#xff0c;身份证图像识别&#xff0c;身份证文字识别&#xff0c;即自动识别和提取身份证上的文字和数字信息。它可以通过图像处理和模式识别算法&#xff0c;将身份证中的姓名、性别、民族、出生…

我们从过去一年的大模型构建过程中学到的经验

当下正是使用大型语言模型&#xff08;LLM&#xff09;构建应用的好时机。过去一年&#xff0c;LLM 已经发展到了足够用于实际应用的水平。LLM 的进化速度与社交媒体层出不穷的演示应用&#xff0c;将在 2025 年吸引对 AI 领域的约 2000 亿美元投资。LLM 的门槛也很低&#xff…

Dbeaver 直连数据库下载数据到本地

参考文章&#xff1a;win11中DBeaver超详细下载与数据库MySQL 要使用 DBeaver 直接连接数据库并将数据下载到本地&#xff0c;您可以按照以下步骤操作&#xff1a; 1. 连接到数据库 打开 DBeaver。点击左上角的“Database”菜单&#xff0c;选择“New Database Connection”…

【数学建模】【2024国赛前必看内容】python基础速成教学及常用python代码包

一、内容介绍 Python在各个编程语言中比较适合新手学习&#xff0c;Python解释器易于扩展&#xff0c;可以使用C、C或其他可以通过C调用的语言扩展新的功能和数据类型。 Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库&#xff0c;提供了适用于各个主要系统…

<Qt> 系统 - 文件

目录 一、Qt文件概述 二、输入输出设备类 三、文件读写类 四、文件和目录信息类 一、Qt文件概述 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt 提供了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操…

Linux centos stream 9命令及源码

学过linux操作系统的人,对文件、命令比较熟悉。最多的操作是用命令处理文件。 随着学习的深入,会提出疑问:命令长什么样? 出于好奇,会找到命令存放的地方,用cat命令看一下,结果可想而知。 我们知道,命令分内部命令和外部命令,存放在不同的位置。外部命令就是一个可执…

Emacs1.0版本之重要特性及用法实例(一百五十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

【Java 数据结构】LinkedList介绍

LinkedList介绍 回顾ArrayList类链表链表是什么链表的分类单向无头链表模拟实现初始化与基本方法查询修改增加删除 双向无头链表模拟实现初始化与基本方法查询修改增加删除 LinkedList类LinkedList类是什么回顾List接口LinkedList使用构造方法常用方法 LinkedList的遍历ArrayLi…

Windows下编译安装PETSc

本文记录在Windows下使用MinGW-w64编译安装PETSc的流程。 0、环境 操作系统Windows 11MSYS2msys2-x86_64-20240507 1、开发环境 首先&#xff0c;下载并安装MSYS2&#xff0c;然后编辑PATH环境变量&#xff0c;添加mingw64相关路径&#xff1a;C:\msys64\mingw64\bin。 然后…

鼠标为什么要放在鼠标垫上才好用?/ 鼠标的工作原理

原创 OREO 力学科普 在数字化时代&#xff0c;鼠标已经成为我们与计算机交互不可或缺的工具。它不仅提高了工作效率&#xff0c;也丰富了我们的数字生活。鼠标总是能精准地感应到人手的移动方向和距离&#xff0c;从而到达人指定的位置&#xff0c;给我们的计算机操作过程带来…

【区块链+乡村振兴】链上云仓智慧动产监管平台 | FISCO BCOS应用案例

2021 年初 ,《中共中央国务院关于全面推进乡村振兴加快农业农村现代化的意见》将“乡村振兴”的重要性提升 到前所未有的战略高度。而随着科技与金融的深度融合&#xff0c;金融行业亦开始步入大数据、云计算、人工智能、区块 链的新技术发展。启动金融科技赋能乡村振兴示范工程…

企业级营销中心应用架构设计

营销中心依托大数据和数据分析应用,搭建灵活可扩展的系统架构,在客户分群、客户画像、客户标签库及模型工厂的基础上,建立营销全流程管理,包括营销活动的发起、执行、反馈和评价,助力银行实现以数据驱动的精准营销模式。此外,还可提供丰富的场景营销解决方案,协助银行打…

java3d-1_4_0_01-windows-i586.exe

下载 Java 3D API 安装 C:\Program Files\Java\Java3D\1.4.0_01\bin C:\Java\jre6 C:\Java\jdk1.6.0_45 C:\Windows 记录下这 4 个目录&#xff0c;去检查下 4 哥目录下文件多了什么 检查目录① C:\Program Files\Java\Java3D\1.4.0_01\bin 检查目录② C:\Java\jre6 C:…

LVS服务的搭建之NAT模式、DR模式的搭建实战

# LVS的概述 1/什么是LVS linux virtural server的简称&#xff0c;也就是linxu虚拟机服务器&#xff0c;使用lvs可以达到的技术目标是&#xff1a;通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群&#xff0c;他具有良好的可靠性&#xff0…

Deepin-Bash中判断是Wayland还是X11显示

Bash中判断是Wayland还是X11显示 一、概述 一、概述 记录一下Linux显示协议的类型 echo $XDG_SESSION_TYPE如果输出是 x11&#xff0c;则使用的 Xorg如果输出是 wayland&#xff0c;则使用的 Wayland

气膜滑雪场重新定义滑雪体验的未来—轻空间

随着滑雪运动的日益普及&#xff0c;滑雪场的建设标准也在不断提高。气膜滑雪场作为一种创新的建筑形式&#xff0c;以其独特的技术优势&#xff0c;正在重新定义滑雪体验。与传统滑雪场相比&#xff0c;气膜滑雪场不仅提升了运营效率&#xff0c;还为滑雪者提供了更为舒适、安…

《学会 SpringBoot · 优雅停机方案》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

C语言文达学院班级管理系统-计算机毕业设计源码03499

摘 要 本文阐述了一个C语言文达学院班级管理系统的设计与实现过程。该系统充分利用ASP.NET的轻量级、灵活性和可扩展性&#xff0c;旨在为文达学院提供高效、便捷的班级管理系统。通过详细的需求分析、技术选型、系统设计、开发实现、测试与调试以及部署与上线等步骤&#xff0…