LeetCode 之 Roman to Integer

Leetcode || Roman to Integer package pack; /* * 从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。 * 反之,减去前一个数的两倍然后加上该数。 */ class Solution { private int getInteger(char ch) { switch(ch) { case 'I' : return 1; c 阅读详情

写在前面:本来这道题目应该昨天完成的,晚上7点多看了会小说浪费了一些时间,晚上又急着回去跳(jian)绳(fei),就没能完成。今天要来办公室值班,一大早来了就想着先把昨天遗留的这道题做了。


题目链接:Roman to Integer
首先百度了下由罗马数字转换为整数的规则到底什么?
这里写图片描述

因此思路:
1、将字符串转为字符数组stringArr
2、根据罗马数字基本字符和阿拉伯数字之间的对应关系,使用switch-case语句,将罗马字符数组stringArr转化为整数数组intArr。
3、根据计数规则,判断整数数组intArr中,前后数字的大小,如果intArr[i]>=intArr[i+1],则将加上intArr[i],否则减去intArr[i],循环判断并累计,得到最终结果
4、其中需要注意的是:当i累加到len-1时,此为intArr数组中最后一个字符,直接将intArr[i]累加上去就可以了,无需对比,因为此时i+1=len超过数组下标的范围,便会抛出异常。
编写代码如下:

public class Solution {
    public int romanToInt(String s) {
        int result = 0;
        char[] stringArr = s.toCharArray(); 
        int len = stringArr.length;
        int[] intArr = new int[len];
        for(int i=0;i<len;i++){
            switch(stringArr[i])
            {
            case 'M':
                intArr[i] = 1000;
                break;
            case 'D':
                intArr[i] = 500;
                break;
            case 'C':
                intArr[i] = 100;
                break;
            case 'L':
                intArr[i] = 50;
                break;
            case 'X':
                intArr[i] = 10;
                break;
            case 'V':
                intArr[i] = 5;
                break;
            case 'I':
                intArr[i] = 1;
                break;
            }
        }
        for(int i=0;i<len;i++){
            if(i == len-1||intArr[i]>=intArr[i+1])
                result = result + intArr[i];
            else
                result = result - intArr[i];
        }
        return result;
    }
}

查看了网上其他人的解法,其利用HashMap,基本罗马字符作为key,对应的阿拉伯数字为value。
以及charAt(int index)方法返回字符的String中指定索引位置的char值。

public class Solution {
    public int romanToInt(String s) {
        int result = 0;
        int len = s.length();
        Map<Character,Integer> map = new HashMap();
        map.put('M', 1000);
        map.put('D', 500);
        map.put('C', 100);
        map.put('L', 50);
        map.put('X', 10);
        map.put('V', 5);
        map.put('I', 1);
        //System.out.println(s.charAt(0));
        for(int i=0;i<len;i++)
        {
            if(i == len-1|| map.get(s.charAt(i))>= map.get(s.charAt(i+1)))
                result = result + map.get(s.charAt(i));
            else
                result = result - map.get(s.charAt(i));
        }
        System.out.println(result);
        return result;
    }
}
Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~ 阅读详情

相关推荐

【eNSP 华为模拟器】单臂路由实战:从原理到配置全解析

本文详细解析了单臂路由技术,通过华为eNSP模拟器从原理到配置进行实战教学。文章阐述了单臂路由如何利用路由器单物理接口创建多个子接口,实现不同VLAN间通信,并提供了完整的操作步骤、配置命令及排错方法,帮助网络工程师掌握这一经典网络技术。

698

LeetCode 13.Roman to Integer(罗马数字转整数) 数学,字符串/easy

文章目录1.Description2.Example3.Solution优化: 1.Description 罗马数字包含以下七种字符: 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

押切徹的博客 339

HarmonyOS开发第一步:Dev Eco Studio4.0保姆级安装配置指南(含Node.js环境)

本文提供HarmonyOS开发环境搭建的保姆级教程,重点详解Dev Eco Studio 4.0的安装与配置,并攻克Node.js环境与Ohpm包管理器的关键设置难点。通过清晰的步骤指引,帮助开发者从零开始,高效完成开发环境部署,顺利迈出鸿蒙应用开发的第一步。

lake5的博客 569

LeetCode#13 Roman to Integer罗马数字转整数

题目描述 Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D ...

IT圈的01羊的博客 262

Ubuntu系统 nano 编辑器使用教程

• 原因:文件编码不兼容(如 Windows 的 CRLF 换行符)。• 若使用 SSH 工具(如 PuTTY),确保终端设置中未占用。掌握这些操作后,你可以高效使用 nano 完成大部分文本编辑任务!• 底部快捷键栏:显示常用操作的快捷键(• 如果文件已修改,会提示是否保存:按。• 顶部状态栏:显示文件名和编辑状态。表示 Ctrl + G(查看帮助)。保存时自动生成备份文件(原文件名后加。• 强制保存只读文件:用。启动 nano 时添加。启动 nano 时添加。(重做)触发自动缩进。

qq_44534541的博客 2083

从代码仓库到知识库:自动化构建与RAG技术实践

在软件工程领域,代码库的规模与复杂性日益增长,如何高效管理和利用其中的知识成为关键挑战。传统文档工具主要依赖注释提取API信息,而现代知识构建技术则通过抽象语法树(AST)解析、自然语言处理等手段,深入理解代码结构、调用关系和业务逻辑。其核心价值在于将非结构化代码转化为机器可理解、可检索的结构化知识,显著提升代码资产的可维护性和团队协作效率。这一过程通常涉及代码解析、信息提取、向量化表示和存储索引四个关键阶段,其中向量化技术将代码语义转化为高维向量,为语义搜索奠定基础。结合检索增强生成(RAG)架构,开发者

weixin_42545292的博客 411

【Leetcode】Roman to Integer题解

用JS的思路去解这道题目 /** * @param {string} s * @return {number} */ var roman = new Map([ ['I', 1], ['V', 5], ['X', 10], ['L', 50], ['C', 100], ['D', 500], ['M', 1000], ]) var romanToInt = function(s) { if (!s) return 0; let n

zwf193071的专栏 254

基于STM32、HAL库的TCA9555PWR I/O扩展器驱动程序设计

define TCA9555_ADDR_BASE 0x20 // 基础地址 (A0=A1=A2=0)* @param direction: 方向 (0=输出, 1=输入)* @param direction: 方向 (0=输出, 1=输入)* @param polarity: 极性 (0=正常, 1=反转)* @param polarity: 极性 (0=正常, 1=反转)

corlin6688的博客 525

Leetcode——Roman to Integer(有分析,有改良,请进)

题目描述 Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. 罗马数字是用七个不同的标志表示:I, V, X, L, C, D 和M. Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M

Blackoutdragon的博客 416

倍福--RS232自由口实现

RS232/485通信协议是在现场中常用到的,比如触摸屏、温控模块等设备控控制器做通信,会常用到此类协议,本文介绍RS232/485自由口通信的实现,并用PC调试助手进行测试。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制器软件 3 硬件连接 3 2.1. PC COM介绍 3 2.2. RS232/RS485连接 3 3.2.1. N030…………. 4 3.2.2. N031…………. 4 2.3. 实际线路连接 5 PLC程序 7 3

weixin_41883890的博客 3284

深度强化学习调参技巧:以DQN、DDPG、TD3、PPO、SAC等算法为例

深度强化学习调参技巧:以D3QN、DDPG、TD3、PPO、SAC算法为例

丨汀、的博客 3443

LeetCode: Roman to Integer

题目: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.题目给定一个字符组成的罗马数字,要求把这个罗马数字转化为整数。答题之前,需要先了解一下罗马数字的表示: 在罗马数字中,I,V,X,L,C,D,M分别表示阿拉伯数字的1,5,1

lianych的博客 327

【Python基础】FastAPI 从入门到项目实战操作详解

【Python基础】FastAPI从入门到使用实战操作详解

congge_study的博客 437

LeetCode 12 Integer to Roman题解

题目地址: https://leetcode.com/problems/integer-to-roman/ 题目: Given an integer, convert it to a roman numeral. 给定一个数,将它转化为罗马数值。 Input is guaranteed to be within the range from 1 to 3999.

赞美月亮的专栏 634

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LeetCode | Roman to Integer

13. Roman to Integer Description Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 5...

Karmen199x的博客 230

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LeetCode力扣 13. 罗马数字转整数 Roman to Integer 题解代码 JavaScript

问题https://leetcode-cn.com/problems/roman-to-integer/ 练习使用JavaScript解答 /** * @param {string} s * @return {number} */ var romanToInt = function(s) { var stu = { 'I':1, 'V':5, 'X':10, 'L':50, 'C':100, .

Coding home - 漂流瓶jz 456

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LeetCode--Roman to Integer

Roman to Integer 1. 题目 Roman numerals are represented by seven different symbols:I,V,X,L,C,DandM. Symbol Value I 1 V 5 X 10 L 50 C ...

Vilin的博客 320

【力扣Leetcode题解系列之0012——Integer to Roman 整数转罗马数字】

本文全面解析了将整数转换为罗马数字的算法问题。文章首先介绍了罗马数字的基本规则和特殊减法情况,然后详细讲解了贪心算法的解法思路及其优势。提供了五种编程语言的实现代码,并分析了算法的时间复杂度(O(1))和空间复杂度(O(1))。此外,文章提出了三个扩展题目方向:支持更大范围的转换、实现双向转换以及处理带条件的转换,增加了问题的挑战性。最后说明了该算法在历史研究、排版编号和密码学等领域的实际应用价值。全文内容系统全面,既适合算法初学者理解基础解法,也为进阶学习者提供了扩展思路。

youngerwang的博客 909

[LeetCode] Roman to Integer and Integer to Roman

羅馬數字共有7個,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。按照下述的規則可以表示任意正整數。需要注意的是罗马数字中没有“0”,與進位制無關。一般認為羅馬數字只用來記數,而不作演算。 重複數次:一個羅馬數字重複幾次,就表示這個數的幾倍。 右加左減: 在較大的羅馬數字的右邊記上較小的羅馬數字,表示大數字加小數字。在較大的羅馬數字的左邊

Jesus in my place 5906

[LeetCode]Roman to Integer

[LeetCode]Roman to Integer

个人技术博客 929

leetcode - Roman to Integer 与 Integer to Roman

leetcode题目汇集  — Roman与Integer之间的互换 参考网址https://zh.wikipedia.org/wiki/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97 Roman To Integer 搬运维基百科对罗马数字性质的介绍: 右加左减: 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。在较大的罗马数字的左边

知足常乐,知行合一 481

【力扣Leetcode题解系列之0013— Roman to Integer 罗马数字转整数】

本文介绍了将罗马数字转换为整数的多种实现方法。题目要求将七个罗马数字符号(I、V、X、L、C、D、M)按特定规则转换为1-3999范围内的整数。文章提供了两种核心解法:从后向前遍历法和从前向后遍历法,并展示了Python、Java、C、C++和Go五种语言的实现示例。算法分析指出时间复杂度为O(n),空间复杂度为O(1)。关键难点在于正确处理罗马数字的减法规则。文章还提出了三个扩展题目:支持扩展罗马数字表示、处理无效输入以及带上下文的转换,并列举了历史研究、艺术建筑和钟表设计等实际应用场景。

youngerwang的博客 1072

Leetcode: Roman to Integer

Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 利用上一题的程序: Judge Small: Accepted! Judge Large:Time Limit Exceeded map romanmp;

ZkvIA的博客 4776

LeetCode之Integer to Roman, Roman to Integer

LeetCode之Integer to Roman, Roman to Integer

Da Cheng Xu 的专栏 1517

【LeetCode】Integer to Roman 和 Roman to Integer 解题报告

【题目】 Given a roman numeral, convert it to an integer. Or, Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 【罗马数字】 1~9: {"I", "II", "III

跳出温水的青蛙 2万+

【LeetCode算法练习(C++)】Integer to Roman

题目: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. ps: I = 1; V = 5; X = 10; L = 50; C = 100; D = 500; M = 1000;链接:Integer to Rom

sst2230879的博客 238
上一篇: LeedCode 之 Palindrome Number
下一篇: LeedCode 之 Longest Common Prefix
小菜鸟要高飞
博客等级 码龄12年 14粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值