leetcode13. 罗马数字转整数,流程图带你遍历所有情况

news2024/9/20 5:36:59

leetcode13. 罗马数字转整数

在这里插入图片描述
示例 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 。

在这里插入图片描述

目录

    • leetcode13. 罗马数字转整数
    • 题目描述
    • 算法分析
    • 算法步骤
    • 算法流程
    • 具体代码
    • 算法分析
      • 复杂度分析
      • 易错点
      • 注意事项
    • 相似题目

题目描述

给定一个罗马数字字符串,将其转换为整数。

算法分析

这个问题可以通过遍历罗马数字字符串并解析每个字符来解决。罗马数字由特定的字符表示,每个字符都有其对应的整数值。在解析时,我们需要考虑一些特殊情况,比如某些字符组合(如IV, IX, XL, XC, CD, CM)表示的整数值与单个字符的组合不同。

算法步骤

  1. 初始化一个变量 res 用于存储结果,并将其设置为 0。
  2. 遍历罗马数字字符串 s
  3. 对于每个字符,根据其值和其后的字符,更新 res
  4. 考虑特殊情况,如IV, IX等,并正确处理。
  5. 返回最终结果 res

算法流程

字符为I
下一个字符为V
下一个字符为X
其他情况
字符为X
下一个字符为L
下一个字符为C
其他情况
字符为C
下一个字符为D
下一个字符为M
其他情况
字符为V
字符为L
字符为D
字符为M
还有更多字符
没有更多字符
开始
读取字符串s的第一个字符
检查下一个字符
结果加4
跳过下一个字符
结果加9
跳过下一个字符
结果加1
检查下一个字符
结果加40
跳过下一个字符
结果加90
跳过下一个字符
结果加10
检查下一个字符
结果加400
跳过下一个字符
结果加900
跳过下一个字符
结果加100
结果加5
结果加50
结果加500
结果加1000
读取下一个字符
结束

具体代码

class Solution {
public:
    int romanToInt(string s) {
    int n=s.size();
    int res=0;
    for(int i=0;i<n;i++)
    {
        if(s[i]=='I')
        {
            if(s[i+1]=='V')
            {
                res+=4;
                i++;
            }
            else if(s[i+1]=='X')
            {
                res+=9;
                i++;
            }
            else
            {
                res+=1;
            }
        }
        else if(s[i]=='X')
        {
            if(s[i+1]=='L')
            {
                res+=40;
                i++;
            }
            else if(s[i+1]=='C')
            {
                res+=90;
                i++;
            }
            else
            {
                res+=10;
            }
        }
        else if(s[i]=='C')
        {
            if(s[i+1]=='D')
            {
                res+=400;
                i++;
            }
            else if(s[i+1]=='M')
            {
                res+=900;
                i++;
            }
            else
            {
                res+=100;
            }
        }
        else 
        {
            if(s[i]=='V')
            {
                res+=5;
            }
            else if(s[i]=='L')
            {
                res+=50;
            }
            else if(s[i]=='D')
            {
                res+=500;
            }
            else if(s[i]=='M')
            {
                res+=1000;
            }
        }
    }
    return res;
    }
};

算法分析

复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串 s 的长度。
  • 空间复杂度:O(1),我们只需要常数级别的额外空间。

易错点

  • 在处理特殊情况时,确保正确地识别和处理它们。
  • 在更新结果时,确保正确地计算整数值。

注意事项

  • 确保在遍历字符串时不要超出字符串的边界。
  • 在处理字符串元素时,确保不会转换错误。

相似题目

题目链接
罗马数字转整数https://leetcode.com/problems/roman-to-integer/
整数转罗马数字https://leetcode.com/problems/integer-to-roman/
反转字符串https://leetcode.com/problems/reverse-string/
字符串转换整数https://leetcode.com/problems/string-to-integer-atoi/

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

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

相关文章

一个贼好用的开源导航网站项目——pintree!【送源码】

这两天发现了一个项目&#xff0c;它可以快速的将收藏夹里的网址导出&#xff0c;然后快速生成一个在线的网站。这个项目就是 pintree。 项目简介 Pintree 是一个开源项目&#xff0c;旨在将浏览器书签转换为导航网站。只需几个简单的步骤&#xff0c;就可以将书签转变为美观…

【CAN-IDPS】汽车网关信息安全要求以及实验方法

《汽车网关信息安全技术要求及试验方法》是中国的一项国家标准,编号为GB/T 40857-2021,于2021年10月11日发布,并从2022年5月1日起开始实施 。这项标准由全国汽车标准化技术委员会(TC114)归口,智能网联汽车分会(TC114SC34)执行,主管部门为工业和信息化部。 该标准主要…

集团数字化转型方案(二)

集团数字化转型方案通过整合物联网&#xff08;IoT&#xff09;、大数据分析、人工智能&#xff08;AI&#xff09;和云计算技术&#xff0c;构建了一个全面智能化的业务平台&#xff0c;从而实现了全集团范围内的业务流程自动化、数据驱动决策优化、以及客户体验的个性化提升。…

windows11 安装 Rancher Desktop

从官网下载了最新版的 Rancher.Desktop.Setup.1.8.1.msi 安装包&#xff0c;安装很顺利。 但是安装完&#xff0c;启动时报错 The k3s cache is empty and there is no network connection. 不明所以&#xff0c;网上查了&#xff0c;原来是github访问不了的原因&#xff0c;具…

这些星座比你想象的还努力

TOP 3. 金牛座   金牛座对于操劳操心的忍受度本来就比较高&#xff0c;对于金牛座来说这些都是踏实的象征&#xff0c;金牛座比较不相信不劳而获这件事情&#xff0c;多少血汗多少付出&#xff0c;得到多少收获&#xff0c;这让金牛座比较踏实&#xff0c;不会觉得很不安&…

CE游戏教程第三关解密

游戏规则&#xff1a;雪人可以左右移动&#xff0c;跳跃&#xff0c;跳跃到红线上&#xff0c;红线变绿&#xff0c;所有红线变率时&#xff0c;门开启&#xff0c;雪人通过门后&#xff0c;游戏胜利。如果游戏中触碰到NPC&#xff0c;游戏失败&#xff01; 经过研究&#xff…

DHCP的原理与配置

目录 DHCP的原理 DHCP是什么 DHCP的好处 DHCP的分配方式 DHCP的工作原理 DHCP的配置 环境设置 DHCP配置 验证配置是否成功 DHCP的原理 DHCP是什么 DHCP:Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议。由Internet工作小组开发&#xff0c;专门用…

自然语言处理NLP四范式

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhlNLP四范式概述 自然语言处理(NLP)的四范式是NLP领域发展历程中的重要里程碑,它们代表了NLP技术从传统方法到现代深度学习技术的转变。第一范式是非神经网络时代的完全监督学习,它依赖于人工设…

Python基础知识学习总结(五)

一. 字典 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#xff0c;每个对之间用逗号( , )分割&#xff0c;整个字典包括在花括号 {} 中 。 dict 作为 Python 的关键字和内置函数&#xff0c;变量名不建议命名…

CompletableFuture-应用

可以看到CompletableFuture实现了CompletionStage 和Future的两个接口。CompletionStage提供了任务之间的衔接能力&#xff0c;而Future则是经常用于阻塞获取结果。 CompletableFuture 的内部使用了基于 ForkJoinPool 的线程池&#xff0c;这种线程池可以高效地调度和执行任务…

数据结构与算法--交换排序与归并排序

文章目录 回顾提要冒泡排序冒泡排序的过程冒泡排序的实现冒泡排序算法评价 快速排序快速排序的划分方法快速排序的过程快速排序的实现快速排序算法性能分析快速排序的改进 归并排序二路归并排序合并两个有序表归并排序示例归并排序算法性能分析 各种内排序方法的比较各种内排序…

SOCKS5代理UDP转发:探秘网络世界的隐形传送带

在这个信息爆炸的时代&#xff0c;网络已经成为我们生活中不可或缺的一部分。然而&#xff0c;网络世界中也充满了各种问题和挑战&#xff0c;比如隐私保护、数据传输的安全性等。今天&#xff0c;我们就来聊聊一种神奇的网络工具——SOCKS5代理&#xff0c;特别是它在UDP转发中…

在撰写跨学科论文时,如何平衡不同研究领域的篇幅和深度?

在学术界&#xff0c;跨学科研究因其能够综合不同领域的知识和方法而受到重视。然而&#xff0c;如何在一篇论文中平衡不同学科的篇幅和深度&#xff0c;是一个常见的挑战。本文将探讨一些有效的策略&#xff0c;帮助你在撰写跨学科论文时&#xff0c;既能展现每个领域的深度&a…

数字产业生态圈如何推动产业加速升级?

在数字化浪潮的推动下&#xff0c;数字产业生态圈逐渐成为产业升级的重要载体。它不仅汇聚了技术创新的源头活水&#xff0c;更通过以下几大途径&#xff0c;为产业注入强劲动力&#xff1a; 1、资源整合&#xff1a;数字产业生态圈将政府、企业、科研机构和高校等多方资源整合…

一个案例讲清5Why分析法,分分钟Get!

探究问题深处的“ 5 why究竟法”&#xff0c;这可不是普通的连连问&#xff0c;而是由丰田创始人丰田佐吉精心锻造的问题挖掘秘籍。简而言之&#xff0c;就是当你遇到一个谜题&#xff0c;连环出击五个“为啥呢&#xff1f;”&#xff0c;一步步揭秘真相的核心。想象一下&#…

C++策略模式Strategy

组件协作– —策略模式strategy &#xff08;运行时可以切换&#xff0c; 运行时多态调用&#xff0c; 不同于if else&#xff0c;&#xff08;bad smell、还占用缓存&#xff09; 只要有if else就应该要想strategy重构 但是如果if else绝对不变的情况&#xff0c;也可以用 原本…

Opencv学习-直方图比较

由于图像的直方图表示图像像素灰度值的统计特性&#xff0c;因此可以通过两幅图像的直方图特性比较 两幅图像的相似程度。从一定程度上来讲&#xff0c;虽然两幅图像的直方图分布相似不代表两幅图像相似&#xff0c;但是两幅图像相似则两幅图像的直方图分布一定相似。例如&…

Openlayer - vue中加载天地图(入门篇)

在vue中安装openlayers npm i --save ol这里说的vue是基于脚手架构建的。 新建个页面&#xff0c;也就是vue文件&#xff0c;配置好路由。接着 就是可以直接放入我的代码运行显示了。 vue利用openlayers加载天地图和高德地图 <template><div class"wrapper&quo…

集团数字化转型方(五)

集团数字化转型方案通过全面整合人工智能&#xff08;AI&#xff09;、大数据分析、云计算和物联网&#xff08;IoT&#xff09;等前沿技术&#xff0c;构建了一个高度智能化的业务平台&#xff0c;从而实现业务流程的自动化、数据驱动的决策支持、精准的市场预测、以及个性化的…

web常见漏洞——XSS

xss 1、xss概述2、环境工具3、反射型xss3.1、利用反射型xss获取cookie 4、DOM型xss4.1、第一关4.2、第二关4.3、第三关4.4、第四关4.5、第五关4.6、第六关4.7、第七关4.8、第八关 5、存储型xss 1、xss概述 XSS全称跨站脚本(Cross Site Scripting)&#xff0c;为避免与层叠样式表…